Spring Cloud Azure-stöd för Spring Messaging Azure Storage Queue

Den här artikeln beskriver hur du kan använda Spring Cloud Azure och Spring Messaging Azure Storage Queue. Spring Framework ger omfattande stöd för integrering med meddelandesystem.

Spring Meddelandehantering för Azure Storage-kö

Viktiga begrepp

Azure Queue Storage är en tjänst för att lagra ett stort antal meddelanden. Du kommer åt meddelanden var som helst i världen via autentiserade anrop med HTTP eller HTTPS. Ett kömeddelande kan vara upp till 64 KB stort. En kö kan innehålla miljontals meddelanden, upp till den totala kapacitetsgränsen för ett lagringskonto. Köer används ofta för att skapa en arbetskö som ska bearbetas asynkront. Spring Messaging för Azure Queue Storage-projektet tillämpar grundläggande Spring-begrepp på utvecklingen av Service Bus-baserade meddelandelösningar. Den innehåller en mall som en abstraktion på hög nivå för att skicka och ta emot meddelanden. Dessa bibliotek främjar användningen av beroendeinmatning och deklarativ konfiguration.

Konfiguration av beroenden

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

Konfiguration

Biblioteket innehåller följande konfigurationsalternativ för StorageQueueTemplate:

Fastighet Typ Beskrivning
spring.cloud.azure.message-converter.isolated-object-mapper booleskt Om en isolerad ObjectMapper-bean används i meddelandekonverteraren för Storage Queue. Aktiverad som standard.
spring.cloud.azure.storage.queue.enabled booleskt Om en Azure Storage-kö är aktiverad.
spring.cloud.azure.storage.queue.connection-string Sträng Anslutningssträngsvärde för lagringskönamnområde.
spring.cloud.azure.storage.queue.accountName Sträng Kontonamn för lagringskö.
spring.cloud.azure.storage.queue.accountKey Sträng Kontonyckel för Storage Queue-kontot

Grundläggande användning

Meddelandekonverterare för anpassad lagringskö

Det finns två sätt att konfigurera meddelandekonverteraren för Lagringskö:

  • Konfigurera följande egenskap så att standardkonverteraren för lagringskömeddelanden använder en ObjectMapper böna, som kan vara din anpassade böna ObjectMapper eller en som hanteras av Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definiera beanen för konvertering av Storage Queue-meddelanden direkt:

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

Skicka och ta emot meddelanden till Azure Storage Queue

Använd följande steg för att skicka och ta emot meddelanden:

  1. Fyll i konfigurationsalternativen för autentiseringsuppgifter med någon av följande metoder:

    • För autentiseringsuppgifter som DefaultAzureCredentialkonfigurerar du följande egenskaper i din application.yml-fil:

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • För autentiseringsuppgifter som anslutningssträng konfigurerar du följande egenskaper i filen application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}
      
    • För autentiseringsuppgifter som hanterade identiteter konfigurerar du följande egenskaper i din application.yml-fil:

      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}
      

Anmärkning

Följande värden tillåts för tenant-id: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din enklientapp till flerklient finns i Konvertera enklientapp till flerklient på Microsoft Entra ID.

  • För autentiseringsuppgifter för en service principal konfigurerar du följande egenskaper i din application.yml-fil:

    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}
    

Anmärkning

Följande värden tillåts för tenant-id: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din enklientapp till flerklient finns i Konvertera enklientapp till flerklient på Microsoft Entra ID.

  1. StorageQueueTemplate konfigureras automatiskt. Du kan automatiskt injicera den direkt i dina egna beans för att skicka eller ta emot meddelanden, som visas i följande exempel:

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

Exempel

Mer information finns i lagringsplatsen azure-spring-boot-samples på GitHub.