Suporte do Spring Cloud Azure para a Fila de Armazenamento do Azure do Spring Messaging

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

Fila de Armazenamento do Azure Spring Messaging

Conceitos principais

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 total de capacidade de uma conta de armazenamento. As filas geralmente são usadas para criar um backlog de trabalho para processar de forma assíncrona. O projeto Spring Messaging for Azure Queue Storage aplica conceitos básicos 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 da injeção de dependência e da 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 ObjectMapper isolado é usado para conversor de mensagens da Fila de Armazenamento. Habilitado 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 fio Valor da cadeia de conexão namespace da fila de armazenamento.
spring.cloud.azure.storage.queue.accountName fio Nome da conta da Fila de Armazenamento.
spring.cloud.azure.storage.queue.accountKey fio Chave da conta da Fila de Armazenamento.

Uso Básico

Conversor de mensagens da Fila de Armazenamento Personalizada

Há duas maneiras de configurar o conversor de mensagens da Fila de Armazenamento:

  • Configure a seguinte propriedade para que o conversor de mensagens da Fila de Armazenamento padrão use um ObjectMapper bean, que pode ser o bean personalizado ObjectMapper ou um gerenciado pelo Spring Boot:

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

    @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 credencial usando uma das seguintes abordagens:

    • Para credenciais como DefaultAzureCredential, configure as seguintes propriedades em seu arquivo de 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 valores a seguir são permitidos para tenant-id: common, organizations, consumersou a ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Uso do ponto de extremidade incorreto (contas pessoais e de organização) do Error AADSTS50020 – A conta de usuário do provedor de identidade não existe no locatário. Para saber como converter seu aplicativo de locatário único, consulte Converter aplicativo de locatário único em multilocatário no Microsoft Entra ID.

  • Para credenciais como entidade de serviço, configure as seguintes propriedades em seu arquivo 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 valores a seguir são permitidos para tenant-id: common, organizations, consumersou a ID do locatário. Para obter mais informações sobre esses valores, consulte a seção Uso do ponto de extremidade incorreto (contas pessoais e de organização) do Error AADSTS50020 – A conta de usuário do provedor de identidade não existe no locatário. Para saber 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 diretamente em seus próprios feijões 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 obter mais informações, consulte o azure-spring-boot-samples repositório no GitHub.