【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连接使用 ConnectionString 方式

Bus,示例,Service,使用 · 浏览次数 : 4

小编点评

**如何在 application.yaml 中添加 connection-string 配置后,即可直接使用 connection-string 属性初始化 Service Bus Processor 对象呢?** 是的,可以将 connection-string 配置值直接在 application.yaml 文件中添加,并使用 Spring Cloud Integration 示例代码的默认配置加载机制自动将其加载到 Service Bus Processor 对象中。 以下是示例代码中的配置示例: ```yaml 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} ``` 这将使用 connection-string 属性的值初始化 Service Bus Processor 对象。 **默认配置加载机制** Spring Cloud Integration 默认使用以下机制加载配置属性: 1. 从 application.yaml 文件中读取 property 属性。 2. 将属性值设置到 Service Bus Processor 的属性中。 3. 通过属性名称自动创建 Service Bus Processor 对象。 因此,您无需手动设置 connection-string 属性, Spring Cloud Integration 会自动将其加载到 Service Bus Processor 对象中。

正文

问题描述

查看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

 

与【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连接使用 ConnectionString 方式相似的内容:

【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连接使用 ConnectionString 方式

问题描述 查看Service Bus的Java示例代码,发现使用Spring Cloud Integration,配置 Application.yaml 可以连接到两个Service Bus。 但代码中没有使用Connection String 属性配置服务连接。 那么,是否可以直接在此添加 con

【Azure 服务总线】查看Service Bus中消息多次发送的日志信息,消息是否被重复消费

问题描述 使用Service Bus,发现消息被重复消费。如果要查看某一条消息的具体消费情况,需要那些消息的属性呢? 问题解答 使用Azure Service Bus,当消费发送到服务端后,就会生产相关属性,如Partition Key,Message ID,Enqueued Time, Seque

【Azure 服务总线】使用Azure Service Bus 时,出现证书错误: 所使用的证书具有无法验证的信任链

问题描述 在Azure中连接 Service Bus 服务发送消息时发生证书错误,抛出证书异常消息: 或 The X.509 certificate CN=servicebus.chinacloudapi.cn, OU=Azure, O=Shanghai Blue Cloud Technology

【Azure Event Hub】自定义告警(Alert Rule)用来提示Event Hub的消息incoming(生产)与outgoing(消费)的异常情况

问题描述 在使用Azure Service Bus的时候,我们可以根据Queue中目前存在的消息数来判断当前消息是否有积压的情况。 但是,在Event Hub中,因为所有消息都会被存留到预先设定的保留时间(默认是7天), 所以无法通过消息数来判断当前的消息是否有积压或者是有多余重复消费。 当消费端出

【Azure 服务总线】Azure.Messaging.ServiceBus 多次发送消息报超时错误,是否可以配置重新发送?是否有内置重试机制?

问题描述 使用 Azure Service Bus,提供应用程序之间松耦合的消息交换,但是有时候发送消息多次出现超时错误。 A connection attempt failed because the connected party did not properly respond after a

【Azure 服务总线】如何批量删除Azure Service Bus中的Topics(数量较多,需要过滤后批量删除)

问题描述 Azure Service Bus 的门户操作页面上,是否可以批量删除其中的Topics呢? 问题解答 Azure Service Bus门户或Service Bus Explorer工具没有提供批量删除Topic的方法。但是可以自己写脚本删除,并且可以在删除的时候自定义过滤条件。 以Py

【Azure 服务总线】Azure门户获取ARM模板,修改Service Bus的TLS版本

问题描述 在Azure中创建Sverice Bus服务后,如果想修改服务的TLS版本,是否有办法呢? 问题解答 通过Service Bus的ARM模板,修改属性值中的 minimumTlsVersion,可以设置Service Bus服务最低支持的TLS版本,如1.0, 1.1, 1.2 操作步骤为

Azure Service Principals ----- Azure 上最好保守的秘密的服务

一,引言 Azure Service Principals 是 Azure Active Directory (AAD) 中的一种标识,代表应用程序,服务,自动化流程。Service Principals 支持各种 Azure 服务和资源之家的安全通信,为应用程序提供了一种进行身份验证并于 Azur

【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?

问题描述 在Azure Redis服务中,如何实现只允许Azure App Service访问呢? 问题解答 Azure Redis 开启 防火墙的功能,并在防火墙中添加上App Service的出口IP地址即可。两步即可实现此目的! 1)查询 App Service 的出口IP地址 2)添加第1步

【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改

问题描述 昨天的博文中(https://www.cnblogs.com/lulight/p/17099179.html)介绍了使用Python SDK 来获取App Service的访问限制信息,那么如何调用REST API来实现呢? 问题解答 如大家所知,Azure 不管是SDK, 门户UI,或者