Suporte do Spring Cloud Azure para Spring Messaging Armazenamento do Azure Queue

Este artigo descreve como você pode usar o Spring Cloud Azure e o Spring Messaging Armazenamento do Azure Queue. O Spring Framework fornece suporte extensivo para integração com sistemas de mensagens.

Spring Messaging Fila de Armazenamento do Azure

Conceitos-chave

O Armazenamento de Filas do Azure é um serviço para armazenar um grande número de mensagens. Você acessa mensagens de qualquer lugar do mundo por meio de chamadas autenticadas usando HTTP ou HTTPS. Uma mensagem de fila pode ter até 64 KB de tamanho. Uma fila pode conter milhões de mensagens, até o limite de capacidade total de uma conta de armazenamento. As filas são comumente usadas para criar uma lista de pendências de trabalho para processar de forma assíncrona. O projeto Spring Messaging for Armazenamento de Filas do Azure aplica os principais conceitos do Spring ao desenvolvimento de soluções de mensagens baseadas em barramento de serviço. Ele fornece um modelo como uma abstração de alto nível para enviar e receber mensagens. Essas bibliotecas promovem o uso de injeção de dependência e configuração declarativa.

Configuração de dependência

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

Configuração

A biblioteca fornece as seguintes opções de configuração para StorageQueueTemplate:

Propriedade Tipo Descrição
spring.cloud.azure.message-converter.isolated-object-mapper Booleano Se um bean isolado do ObjectMapper é usado para o conversor de mensagens da fila de armazenamento. Ativado por padrão.
spring.cloud.azure.storage.queue.enabled Booleano Se uma Fila de Armazenamento do Azure está habilitada.
spring.cloud.azure.storage.queue.connection-string Cordão Valor da cadeia de conexão do namespace da fila de armazenamento.
spring.cloud.azure.storage.queue.accountName Cordão Nome da conta da Fila de Armazenamento.
spring.cloud.azure.storage.queue.accountKey Cordão Chave da conta da Fila de Armazenamento.

Utilização básica

Conversor de mensagens da fila de armazenamento personalizada

Há duas maneiras de configurar o conversor de mensagens da fila de armazenamento:

  • Configure a propriedade seguinte para que o conversor de mensagens predefinido da Storage Queue utilize um bean ObjectMapper, que pode ser o seu bean ObjectMapper personalizado ou um bean gerido pelo Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Defina diretamente o bean conversor de mensagens da fila de armazenamento:

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

Enviar e receber mensagens para a Fila de Armazenamento do Azure

Use as seguintes etapas para enviar e receber mensagens:

  1. Preencha as opções de configuração de credenciais usando uma das seguintes abordagens:

    • Para credenciais como DefaultAzureCredential, configure as seguintes propriedades no arquivo application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • Para credenciais como cadeia de conexão, configure as seguintes propriedades no arquivo application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}
      
    • Para credenciais como identidades gerenciadas, configure as seguintes propriedades em seu arquivo 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}
      

Observação

Os seguintes valores são permitidos para tenant-id: common, organizations, consumersou o ID do locatário. Para obter mais informações sobre esses valores, consulte a secção Usou o ponto de extremidade errado (contas pessoais e de organização) na secção Erro AADSTS50020 - A conta de utilizador do provedor de identidade não existe no inquilino. Para obter informações sobre como converter seu aplicativo de locatário único, consulte Converter aplicativo de locatário único em multilocatário no Microsoft Entra ID.

  • Para credenciais de principal de serviço, configure as seguintes propriedades no ficheiro 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}
    

Observação

Os seguintes valores são permitidos para tenant-id: common, organizations, consumersou o ID do locatário. Para obter mais informações sobre esses valores, consulte a secção Usou o ponto de extremidade errado (contas pessoais e de organização) na secção Erro AADSTS50020 - A conta de utilizador do provedor de identidade não existe no inquilino. Para obter informações sobre como converter seu aplicativo de locatário único, consulte Converter aplicativo de locatário único em multilocatário no Microsoft Entra ID.

  1. StorageQueueTemplate é configurado automaticamente. Você pode conectá-lo automaticamente em seus próprios beans para enviar ou receber mensagens, conforme mostrado no exemplo a seguir:

    @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();
            // ...
        }
    
    }
    

Exemplos

Para mais informações, consulte o azure-spring-boot-samples repositório no GitHub.