了解如何使用 eventhub kafka 配置 Spring Cloud 以在同一命名空间中发送和接收消息,如下所示 https://github.com/MicrosoftDocs/azure-dev-docs/blob/master/articles/java/spring-framework/configure-spring-cloud-stream-binder-java-app-kafka-azure-event-hub .md
但是,就我而言,我需要从一个 eventhub 接收并将其发送到不同的命名空间,我该如何配置?
可以参考Spring Cloud Stream Kafka Binder的多binder示例,https://github.com/spring-cloud/spring-cloud-stream-samples/tree/main/multi-binder-samples/multi- binder-two-kafka-clusters,对于使用事件中心应该是相同的
当您配置多个绑定器(每个 eventhub 命名空间一个)时,kafka 会检测到所有绑定器的 sasl 配置相同。因此,kafka 只会为第一个活页夹创建一个 LoginManager,并将其重用于其他活页夹。
因此,第一个活页夹的一切都按预期进行。其他绑定器仍然可以获取 oauth 令牌,但该令牌属于第一个命名空间的 eventHub。这会导致一个奇怪的错误。
解决方法:
您可以通过添加不需要但可用于获取唯一配置的配置来强制 sasl 配置唯一,例如:
spring:
cloud:
stream:
binders:
event-hub-1:
type: kafka
environment:
spring.cloud.stream.kafka.binder:
brokers: "eventhub-1.servicebus.windows.net:9093"
configuration:
# only present to make the sasl config unique
sasl.kerberos.service.name: event-hub-1
event-hub-2:
type: kafka
environment:
spring.cloud.stream.kafka.binder:
brokers: "eventhub-2.servicebus.windows.net:9093"
autoCreateTopics: false
configuration:
# only present to make the sasl config unique
sasl.kerberos.service.name: event-hub-2