问题描述
查看Service Bus的Java示例代码,发现使用Spring Cloud Integration,配置 Application.yaml 可以连接到两个Service Bus。 但代码中没有使用Connection String 属性配置服务连接。
那么,是否可以直接在此添加 connection-string配置后,不用修改代码就可以连接到Service Bus服务呢?
问题解答
在解答这个问题之前,需要查看示例代码中,是如何来使用application.yaml中的属性值。
1) 自定义 CustomizedServiceBusProperties 对象,结构化 应用的属性配置
2) 在 MultipleAzureServiceBusNamespacesConfiguration 中读取配置,并调用 com.azure.spring.messaging.servicebus.core.DefaultServiceBusNamespaceProcessorFactory 构造函数
接下来,就需要查看com.azure.spring.messaging.servicebus.core.DefaultServiceBusNamespaceProcessorFactory的构造函数是否可以使用connction string属性初始化 Service Bus Processor对象。
查看 DefaultServiceBusNamespaceProcessorFactory 类的介绍文档:https://azuresdkdocs.blob.core.windows.net/$web/java/spring-messaging-azure-servicebus/4.1.0/com/azure/spring/messaging/servicebus/core/DefaultServiceBusNamespaceProcessorFactory.html#createProcessor(java.lang.String,com.azure.spring.cloud.service.listener.MessageListener,com.azure.spring.cloud.service.servicebus.consumer.ServiceBusErrorHandler)
构造函数由 NamespaceProperties 类传递参数, 它拥有GetConnectionStrng方法可以直接读取connection-string属性值
getConnectionString
public String getConnectionString()
Specified by:
getConnectionString in interface com.azure.spring.cloud.core.provider.connectionstring.ConnectionStringProvider
Specified by:
getConnectionString in interface com.azure.spring.cloud.service.implementation.servicebus.properties.ServiceBusClientCommonProperties
根据以上分析,如果需要Spring Cloud Integration示例代码使用连接字符串(Connection String) 初始化 Service Bus对象,只要在Application.yaml 文件中使用connection-string并设置正确的值就可以。
my.servicebus.namespaces[0]:
connection-string: {AZURE_SERVICEBUS_CONNECTION_STRING_01}
entity-type: queue
entity-name: {AZURE_SERVICEBUS_NAMESPACE_01_QUEUE_NAME}
my.servicebus.namespaces[1]:
connection-string: {AZURE_SERVICEBUS_CONNECTION_STRING_02}
entity-type: queue
entity-name: {AZURE_SERVICEBUS_NAMESPACE_02_QUEUE_NAME}
参考资料
Sending and Receiving Message by Azure Service Bus (Multiple Namespaces) And Spring Integration in Spring Boot Application :https://github.com/Azure-Samples/azure-spring-boot-samples/tree/main/servicebus/spring-cloud-azure-starter-integration-servicebus/multiple-namespaces
Class DefaultServiceBusNamespaceProcessorFactory : https://azuresdkdocs.blob.core.windows.net/$web/java/spring-messaging-azure-servicebus/4.1.0/com/azure/spring/messaging/servicebus/core/DefaultServiceBusNamespaceProcessorFactory.html