Spring Cloud Azure-ondersteuning voor Spring Messaging Azure Storage Queue

In dit artikel wordt beschreven hoe u Spring Cloud Azure en Spring Messaging Azure Storage Queue kunt gebruiken. Het Spring Framework biedt uitgebreide ondersteuning voor integratie met berichtensystemen.

Spring Messaging Azure Opslagwachtrij

Belangrijke concepten

Azure Queue Storage is een service om grote aantallen berichten op te slaan. U opent berichten vanaf elke locatie ter wereld via geverifieerde aanroepen via HTTP of HTTPS. Een wachtrijbericht kan maximaal 64 kB groot zijn. Een wachtrij kan miljoenen berichten bevatten, tot de totale capaciteitslimiet van een opslagaccount. Wachtrijen worden vaak gebruikt om een voorraad werk te maken dat asynchroon moet worden verwerkt. Het Spring Messaging-project voor Azure Queue Storage past kernconcepten van Spring toe op de ontwikkeling van op service bus gebaseerde berichtenoplossingen. Het biedt een sjabloon als abstractie op hoog niveau voor het verzenden en ontvangen van berichten. Deze bibliotheken bevorderen het gebruik van afhankelijkheidsinjectie en declaratieve configuratie.

Afhankelijkheid instellen

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

Configuratie

De bibliotheek biedt de volgende configuratieopties voor StorageQueueTemplate:

Vastgoed Typ Beschrijving
spring.cloud.azure.message-converter.isolated-object-mapper booleaan Of een geïsoleerde ObjectMapper-bean wordt gebruikt voor het berichtconversieprogramma van de opslagwachtrij. Standaard ingeschakeld.
spring.cloud.azure.storage.queue.enabled booleaan Of een Azure Storage-wachtrij is ingeschakeld.
spring.cloud.azure.storage.queue.connection-string Touwtje Verbindingsreekswaarde voor opslagwachtrijnaamruimte.
spring.cloud.azure.storage.queue.accountName Touwtje Naam van opslagwachtrijaccount.
spring.cloud.azure.storage.queue.accountKey Touwtje Opslagwachtrijaccountsleutel.

Basaal gebruik

Berichtconversieprogramma voor aangepaste opslagwachtrij

Er zijn twee manieren om het berichtconversieprogramma voor opslagwachtrijen te configureren:

  • Configureer de volgende eigenschap om het standaard berichtconversieprogramma voor opslagwachtrijen te gebruiken met een ObjectMapper bean. Dit kan uw aangepaste ObjectMapper bean zijn of een bean die wordt beheerd door Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definieer de bean voor het berichtconversieprogramma voor de opslagwachtrij rechtstreeks:

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

Berichten verzenden en ontvangen naar Azure Storage Queue

Gebruik de volgende stappen om berichten te verzenden en te ontvangen:

  1. Vul de configuratieopties voor referenties in op een van de volgende manieren:

    • Configureer voor referenties als DefaultAzureCredentialde volgende eigenschappen in uw application.yml bestand:

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • Voor referenties als verbindingsreeks configureert u de volgende eigenschappen in uw application.yml-bestand:

      spring:
        cloud:
          azure:
            storage:
              queue:
                connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}
      
    • Voor referenties als beheerde identiteiten configureert u de volgende eigenschappen in uw application.yml-bestand:

      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}
      

Opmerking

De volgende waarden zijn toegestaan voor tenant-id: common, organizations, consumersof de tenant-id. Zie voor meer informatie over deze waarden de sectie Verkeerd eindpunt gebruikt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van identiteitsprovider bestaat niet in tenant. Zie App met één tenant converteren naar multitenant op Microsoft Entra IDvoor meer informatie over het converteren van uw app met één tenant.

  • Voor referenties als service-principal configureert u de volgende eigenschappen in uw application.yml-bestand:

    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}
    

Opmerking

De volgende waarden zijn toegestaan voor tenant-id: common, organizations, consumersof de tenant-id. Zie voor meer informatie over deze waarden de sectie Verkeerd eindpunt gebruikt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van identiteitsprovider bestaat niet in tenant. Zie App met één tenant converteren naar multitenant op Microsoft Entra IDvoor meer informatie over het converteren van uw app met één tenant.

  1. StorageQueueTemplate is automatisch geconfigureerd. U kunt het rechtstreeks aan uw eigen bonen koppelen om berichten te verzenden of te ontvangen, zoals wordt weergegeven in het volgende voorbeeld:

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

Voorbeelden

Zie de azure-spring-boot-samples opslagplaats op GitHub voor meer informatie.