Поддержка Spring Cloud Azure для очереди службы хранилища Azure Spring Messaging

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

Очереди хранилища Azure для Spring Messaging

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

Хранилище очередей Azure — это сервис для хранения большого числа сообщений. Доступ к сообщениям возможен из любой точки мира с помощью вызовов с проверкой подлинности по протоколу HTTP или HTTPS. Максимальный размер сообщения в очереди составляет 64 КБ. Очередь может содержать миллионы сообщений до общего предела емкости учетной записи хранения. Очереди обычно используются для создания списка невыполненных заданий для асинхронной обработки. Проект Spring Messaging для хранилища очередей Azure применяет основные понятия Spring к разработке решений обмена сообщениями на основе служебной шины. Он предоставляет шаблон как высокоуровневую абстракцию для отправки и получения сообщений. Эти библиотеки способствуют использованию внедрения зависимостей и декларативной конфигурации.

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

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

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

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

Недвижимость Тип Описание
spring.cloud.azure.message-converter.isolated-object-mapper булевый Используется ли изолированный объект ObjectMapper для преобразователя сообщений очереди хранилища. Включен по умолчанию.
spring.cloud.azure.storage.queue.enabled булевый Включена ли очередь службы хранилища Azure.
spring.cloud.azure.storage.queue.connection-string Струна Строковое значение строки подключения пространства имен очереди хранилища.
spring.cloud.azure.storage.queue.accountName Струна Имя учетной записи очереди хранения.
spring.cloud.azure.storage.queue.accountKey Струна Ключ учетной записи очереди хранения.

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

Преобразователь сообщений очереди пользовательского хранилища

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

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

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

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

Отправка и получение сообщений в очередь службы хранилища Azure

Выполните следующие действия для отправки и получения сообщений:

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

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

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • Для учетных данных в качестве строки подключения настройте следующие свойства в файле application.yml:

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

      spring:
        cloud:
          azure:
            credential:
              managed-identity-enabled: true
              client-id: ${AZURE_CLIENT_ID}
            profile:
              tenant-id: <tenant>
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      

Примечание.

Для 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>
          storage:
            queue:
              account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
    

Примечание.

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

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

    @Component
    public class MyBean {
    
        private final StorageQueueTemplate storageQueueTemplate;
    
        public MyBean(StorageQueueTemplate storageQueueTemplate) {
            this.storageQueueTemplate = storageQueueTemplate;
        }
    
        public void someMethod() {
            this.serviceBusTemplate.sendAsync('STORAGE_QUEUE_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe();
        }
    
        public void processMessage() {
            Message<?> message = storageQueueTemplate.receiveAsync('STORAGE_QUEUE_NAME', Duration.ofSeconds(30)).block();
            // ...
        }
    
    }
    

Образцы

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