Supporto di Spring Cloud Azure per la coda di Archiviazione di Azure per Spring Messaging

Questo articolo descrive come usare Spring Cloud Azure e Spring Messaging Azure Storage Queue. Spring Framework offre un ampio supporto per l'integrazione con i sistemi di messaggistica.

Spring Messaging Coda di Archiviazione Azure

Concetti chiave

Archiviazione code di Azure è un servizio per l'archiviazione di un numero elevato di messaggi. È possibile accedere ai messaggi da qualsiasi parte del mondo tramite chiamate autenticate tramite HTTP o HTTPS. Un messaggio in coda può avere dimensioni fino a 64 KB. Una coda può contenere milioni di messaggi, fino al limite di capacità totale di un account di archiviazione. Le code sono comunemente utilizzate per creare un arretrato di lavoro da processare in maniera asincrona. Il progetto Spring Messaging for Azure Queue Storage applica i concetti di base di Spring allo sviluppo di soluzioni di messaggistica basate sul bus di servizio. Fornisce un modello di come astrazione di alto livello per l'invio e la ricezione di messaggi. Queste librerie promuovono l'uso dell'inserimento delle dipendenze e della configurazione dichiarativa.

Configurazione delle dipendenze

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

Configurazione

La libreria offre le opzioni di configurazione seguenti per StorageQueueTemplate:

Proprietà TIPO Descrizione
spring.cloud.azure.message-converter.isolated-object-mapper booleano Indica se un bean ObjectMapper isolato viene usato per il convertitore di messaggi della coda di archiviazione. Abilitato per impostazione predefinita.
spring.cloud.azure.storage.queue.enabled booleano Indica se è abilitata una coda di archiviazione di Azure.
spring.cloud.azure.storage.queue.connection-string Stringa Valore della stringa di connessione dello spazio dei nomi della coda di archiviazione.
spring.cloud.azure.storage.queue.accountName Stringa Nome dell'account della coda di archiviazione.
spring.cloud.azure.storage.queue.accountKey Stringa Chiave dell'account della coda di archiviazione.

Utilizzo di base

Convertitore di messaggi della coda di archiviazione personalizzata

Esistono due modi per configurare il convertitore di messaggi della coda di archiviazione:

  • Configurare la proprietà seguente in modo che il convertitore di messaggi della coda di archiviazione predefinito usi un ObjectMapper bean, che può essere il bean personalizzato ObjectMapper o uno gestito da Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definire direttamente il bean del convertitore di messaggi della coda di archiviazione:

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

Inviare e ricevere messaggi alla coda di Archiviazione di Azure

Usare la procedura seguente per inviare e ricevere messaggi:

  1. Compilare le opzioni di configurazione delle credenziali usando uno degli approcci seguenti:

    • Per le credenziali come DefaultAzureCredential, configurare le proprietà seguenti nel file application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • Per le credenziali come stringa di connessione, configurare le proprietà seguenti nel file application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}
      
    • Per le credenziali come identità gestite, configurare le proprietà seguenti nel file 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}
      

Annotazioni

Per tenant-idsono consentiti i valori seguenti: common, organizations, consumerso l'ID tenant. Per ulteriori informazioni su questi valori, consultare la sezione Utilizzato l'endpoint sbagliato (account personali e organizzativi) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione della tua app a tenant singolo in multi-tenant, vedere Convertire app a tenant singolo in multi-tenant in Microsoft Entra ID.

  • Per le credenziali come entità servizio, configurare le proprietà seguenti nel file 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}
    

Annotazioni

Per tenant-idsono consentiti i valori seguenti: common, organizations, consumerso l'ID tenant. Per ulteriori informazioni su questi valori, consultare la sezione Utilizzato l'endpoint sbagliato (account personali e organizzativi) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione della tua app a tenant singolo in multi-tenant, vedere Convertire app a tenant singolo in multi-tenant in Microsoft Entra ID.

  1. StorageQueueTemplate è configurato automaticamente. È possibile cablarla direttamente nei propri fagioli per inviare o ricevere messaggi, come illustrato nell'esempio seguente:

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

Esempi

Per altre informazioni, vedere il azure-spring-boot-samples repository in GitHub.