Поддержка Spring Cloud Azure для Spring Messaging Центры событий Azure

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

Spring Messaging в Центрах событий Azure

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

Центры событий Azure — это собственная служба потоковой передачи данных в облаке, которая может передавать миллионы событий в секунду с низкой задержкой из любого источника в любое место назначения. Проект Spring Messaging для Центров событий Azure применяет основные понятия Spring к разработке решений для обмена сообщениями на основе центров событий. Он предоставляет шаблон как высокоуровневую абстракцию для отправки сообщений. Также обеспечивает поддержку простых объектов Java (POJO), управляемых сообщениями, с аннотациями @EventHubsListener и контейнером слушателя. Эти библиотеки способствуют использованию внедрения зависимостей и декларативной конфигурации. Во всех этих случаях можно заметить сходство с поддержкой 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-eventhubs</artifactId>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
</dependency>

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

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

Недвижимость Тип Описание
spring.cloud.azure.message-converter.isolated-object-mapper булевый Используется ли изолированный объект ObjectMapper для преобразователя сообщений Центров событий. Включен по умолчанию.
spring.cloud.azure.eventhubs.enabled булевый Включена ли служба Центров событий Azure.
spring.cloud.azure.eventhubs.connection-string Струна Значение строки подключения для пространства имен Центров событий.
spring.cloud.azure.eventhubs.namespace Струна Значение пространства имен Event Hubs, которое является префиксом FQDN. Полное доменное имя должно состоять из NamespaceName.DomainName
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name Струна Имя учетной записи хранения.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key Струна Ключ доступа к учетной записи хранения.
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name Струна Имя контейнера хранилища.

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

Настраиваемый преобразователь сообщений Центров событий

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

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

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

    @Bean
    AzureMessageConverter<EventData, EventData> eventHubsMessageConverter() {
        JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build();
        return new EventHubsMessageConverter(jsonMapper);
    }
    

Отправка сообщений в Центры событий Azure

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

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

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

      spring:
        cloud:
          azure:
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
      
    • Для учетных данных в качестве строки подключения настройте следующие свойства в файле application.yml:

      spring:
        cloud:
          azure:
            eventhubs:
              connection-string: ${AZURE_EVENT_HUBS_CONNECTION_STRING}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
                  account-key: ${CHECKPOINT-ACCESS-KEY}
      
    • Для учетных данных в качестве управляемых удостоверений настройте следующие свойства в файле application.yml:

      spring:
        cloud:
          azure:
            credential:
              managed-identity-enabled: true
              client-id: ${AZURE_CLIENT_ID}
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CONTAINER_NAME}
                  account-name: ${ACCOUNT_NAME}
      
    • Для учетных данных в качестве субъекта-службы настройте следующие свойства в файле application.yml:

      spring:
        cloud:
          azure:
            credential:
              client-id: ${AZURE_CLIENT_ID}
              client-secret: ${AZURE_CLIENT_SECRET}
            profile:
              tenant-id: <tenant>
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CONTAINER_NAME}
                  account-name: ${ACCOUNT_NAME}
      

Примечание.

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

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

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

Получение сообщений из Центров событий Azure

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

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

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

    @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. Если инфраструктура Event Hubs доступна, вы можете аннотировать любой bean-компонент с помощью @EventHubsListener, чтобы создать конечную точку listener. Следующий компонент создает конечную точку прослушивателя в концентраторе событий EVENT_HUB_NAME и группе потребителей $Default:

    @Component
    public class MyBean {
    
        @EventHubsListener(destination = "EVENT_HUB_NAME", group = "$Default")
        public void processMessage(String content) {
            // ...
        }
    
    }
    

Образцы

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