Поддержка Служебная шина Azure в Spring Cloud Azure для Spring Messaging

В этой статье описывается, как можно использовать Spring Cloud Azure и Spring Messaging Служебная шина Azure. Spring Framework обеспечивает обширную поддержку интеграции с системами обмена сообщениями.

Сервисная шина Azure Spring Messaging

Основные понятия

Служебная шина Azure — это полностью управляемый корпоративный брокер сообщений с очередями сообщений и разделами публикации и подписки. Проект Spring Messaging для служебной шины Azure применяет основные понятия Spring к разработке решений обмена сообщениями на основе служебной шины. Он предоставляет шаблон как высокоуровневую абстракцию для отправки сообщений. Она также обеспечивает поддержку POJO, управляемых сообщениями, с аннотациями @ServiceBusListener и контейнером слушателя. Эти библиотеки способствуют использованию внедрения зависимостей и декларативной конфигурации. Во всех этих случаях можно заметить сходство с поддержкой JMS в Spring Framework и поддержкой RabbitMQ в Spring AMQP.

Настройка зависимостей

<dependency>
  <groupId>com.azure.spring</groupId>
  <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
  <groupId>com.azure.spring</groupId>
  <artifactId>spring-messaging-azure-servicebus</artifactId>
</dependency>

Конфигурация

Библиотека предоставляет следующие параметры конфигурации для ServiceBusTemplate и @ServiceBusListener:

Недвижимость Тип Описание
spring.cloud.azure.message-converter.isolated-object-mapper булевый Используется ли изолированный объект ObjectMapper для преобразователя сообщений служебной шины. Включен по умолчанию.
spring.cloud.azure.servicebus.enabled булевый Включена ли служебная шина Azure.
spring.cloud.azure.servicebus.connection-string Струна Значение строки подключения пространства имен служебная шина.
spring.cloud.azure.servicebus.custom-endpoint-address Струна Адрес настраиваемой конечной точки, используемый при подключении к служебная шина.
spring.cloud.azure.servicebus.namespace Струна Значение пространства имен служебная шина, которое является префиксом полного доменного имени. Полное доменное имя должно состоять из NamespaceName.DomainName
spring.cloud.azure.servicebus.entity-type Струна Тип сущности служебной шины Azure.

Базовое использование

Преобразователь сообщений пользовательской служебной шины

Существует два способа настройки преобразователя сообщений служебной шины:

  • Настройте следующее свойство, чтобы преобразователь сообщений служебная шина по умолчанию использовал компонент ObjectMapper, который может быть вашим пользовательским компонентом ObjectMapper или компонентом, управляемым Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Определите бин преобразователя сообщений служебная шина непосредственно:

    @Bean
    AzureMessageConverter<ServiceBusReceivedMessage, ServiceBusMessage> serviceBusMessageConverter() {
        JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build();
        return new ServiceBusMessageConverter(jsonMapper);
    }
    

Отправка сообщений в служебную шину Azure

Чтобы отправить сообщения, выполните следующие действия.

  1. Заполните параметры конфигурации учетных данных с помощью одного из следующих подходов:

    • Для учетных данных в качестве DefaultAzureCredentialнастройте следующие свойства в файле application.yml:

      spring:
        cloud:
          azure:
            servicebus:
              namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      
    • Для учетных данных в качестве строки подключения настройте следующие свойства в файле application.yml:

      spring:
        cloud:
          azure:
            servicebus:
              connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      
    • Для учетных данных в качестве управляемых удостоверений настройте следующие свойства в файле application.yml:

      spring:
        cloud:
          azure:
            credential:
              managed-identity-enabled: true
              client-id: ${AZURE_CLIENT_ID}
            profile:
              tenant-id: <tenant>
            servicebus:
              namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      

Примечание.

Для tenant-idразрешены следующие значения: common, organizations, consumersили идентификатор клиента. Дополнительные сведения об этих значениях см. в разделе Используется неправильная конечная точка (личные учетные записи и учетные записи организации) раздела Ошибка AADSTS50020 - Учетная запись пользователя от поставщика удостоверений не существует в арендаторе. Сведения о преобразовании вашего однопользовательского приложения см. в разделе Преобразование однопользовательского приложения в многопользовательское в Microsoft Entra ID.

  • Для учетных данных в качестве субъекта-службы настройте следующие свойства в файле application.yml:

    spring:
      cloud:
        azure:
          credential:
            client-id: ${AZURE_CLIENT_ID}
            client-secret: ${AZURE_CLIENT_SECRET}
          profile:
            tenant-id: <tenant>
          servicebus:
            namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
            entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
    

Примечание.

Для tenant-idразрешены следующие значения: common, organizations, consumersили идентификатор клиента. Дополнительные сведения об этих значениях см. в разделе Используется неправильная конечная точка (личные учетные записи и учетные записи организации) раздела Ошибка AADSTS50020 - Учетная запись пользователя от поставщика удостоверений не существует в арендаторе. Сведения о преобразовании вашего однопользовательского приложения см. в разделе Преобразование однопользовательского приложения в многопользовательское в Microsoft Entra ID.

  1. ServiceBusTemplate автоматически конфигурируется, и вы можете напрямую автоматически внедрить его в свои бины, как показано в следующем примере:

    @Component
    public class MyBean {
    
        private final ServiceBusTemplate serviceBusTemplate;
    
        public MyBean(ServiceBusTemplate serviceBusTemplate) {
            this.serviceBusTemplate = serviceBusTemplate;
        }
    
        public void someMethod() {
            this.serviceBusTemplate.sendAsync('QUEUE_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe();
        }
    
    }
    

Получение сообщений из служебной шины Azure

Чтобы получать сообщения, выполните следующие действия.

  1. Заполните параметры конфигурации учетных данных.

  2. Добавьте аннотацию @EnableAzureMessaging, которая запускает обнаружение методов, аннотированных с помощью @ServiceBusListener, и в фоновом режиме создает контейнер слушателя сообщений.

    @SpringBootApplication
    @EnableAzureMessaging
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    Примечание.

    Чтобы избежать повторения, начиная с версии 5.21.0, аннотация @EnableAzureMessaging автоматически включается в Spring Cloud Azure Auto-configure.

  3. При наличии инфраструктуры ServiceBus вы можете аннотировать любой компонент с помощью @ServiceBusListener, чтобы создать конечную точку слушателя. Следующий компонент создает конечную точку прослушивателя в очереди QUEUE_NAME:

    @Component
    public class MyBean {
    
        @ServiceBusListener(destination = "QUEUE_NAME")
        public void processMessage(String content) {
            // ...
        }
    
    }
    

Настройка свойств клиента служебная шина

Разработчики могут использовать AzureServiceClientBuilderCustomizer для настройки свойств клиента служебной шины. Следующий пример настраивает свойство sessionIdleTimeout в ServiceBusClientBuilder:

@Bean
public AzureServiceClientBuilderCustomizer<ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder> customizeBuilder() {
    return builder -> builder.sessionIdleTimeout(Duration.ofSeconds(10));
}

Образцы

Дополнительные сведения см. в репозитории azure-spring-boot-samples на сайте GitHub.