Obsługa Spring Messaging Azure Storage Queue w usłudze Spring Cloud Azure

W tym artykule opisano, jak można używać bibliotek Spring Cloud Azure i Spring Messaging Azure Storage Queue. Platforma Spring Framework zapewnia rozbudowaną obsługę integracji z systemami obsługi komunikatów.

Kolejka Storage Azure dla Spring Messaging

Najważniejsze pojęcia

Azure Queue Storage to usługa do przechowywania dużej liczby komunikatów. Uzyskujesz dostęp do komunikatów z dowolnego miejsca na świecie za pośrednictwem uwierzytelnionych wywołań przy użyciu protokołu HTTP lub HTTPS. Komunikat w kolejce może mieć maksymalnie 64 KB rozmiaru. Kolejka może zawierać miliony komunikatów, aż do łącznego limitu pojemności konta magazynowego. Kolejki są często używane do tworzenia zapasu zaległych zadań w celu asynchronicznego przetwarzania zadań. Projekt Spring Messaging for Azure Queue Storage stosuje podstawowe pojęcia dotyczące platformy Spring do opracowywania rozwiązań obsługi komunikatów opartych na magistrali usług. Udostępnia szablon jako abstrakcję wysokiego poziomu do wysyłania i odbierania komunikatów. Te biblioteki promują użycie wstrzykiwania zależności i konfiguracji deklaratywnej.

Konfiguracja zależności

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

Konfiguracja

Biblioteka udostępnia następujące opcje konfiguracji dla StorageQueueTemplate:

Majątek Typ Opis
spring.cloud.azure.message-converter.isolated-object-mapper typ logiczny (boolowski) Czy dla konwertera komunikatów Storage Queue jest używany izolowany bean ObjectMapper. Włączone domyślnie.
spring.cloud.azure.storage.queue.enabled typ logiczny (boolowski) Określa, czy kolejka usługi Azure Storage jest włączona.
spring.cloud.azure.storage.queue.connection-string Sznurek Wartość ciągu połączenia dla przestrzeni nazw usługi Queue Storage.
spring.cloud.azure.storage.queue.accountName Sznurek Nazwa konta usługi Storage Queue.
spring.cloud.azure.storage.queue.accountKey Sznurek Klucz konta usługi Storage Queue.

Podstawowy sposób użycia

Konwerter komunikatów kolejki usługi Custom Storage

Istnieją dwa sposoby konfigurowania konwertera komunikatów usługi Storage Queue:

  • Skonfiguruj następującą właściwość, aby domyślny konwerter komunikatów Storage Queue używał beana ObjectMapper, który może być niestandardowym beanem ObjectMapper lub beanem zarządzanym przez Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Zdefiniuj bezpośrednio bean konwertera komunikatów usługi Storage Queue:

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

Wysyłanie i odbieranie komunikatów w usłudze Azure Storage Queue

Wykonaj następujące kroki, aby wysyłać i odbierać komunikaty:

  1. Wypełnij opcje konfiguracji poświadczeń przy użyciu jednej z następujących metod:

    • Aby skonfigurować poświadczenia jako DefaultAzureCredential, skonfiguruj następujące właściwości w pliku application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • Jeśli poświadczenia są podawane jako parametry połączenia, skonfiguruj następujące właściwości w pliku application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}
      
    • W przypadku poświadczeń jako tożsamości zarządzanych skonfiguruj następujące właściwości w pliku 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}
      

Uwaga

Następujące wartości są dozwolone dla tenant-id: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użyto nieprawidłowego punktu końcowego (kont osobistych i organizacji) sekcji Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje wdzierżawy. Aby uzyskać informacje na temat konwertowania aplikacji z jedną dzierżawą, zobacz Convert single-tenant app to multitenant on Microsoft Entra ID.

  • W przypadku poświadczeń jednostki usługi skonfiguruj następujące właściwości w pliku 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}
    

Uwaga

Następujące wartości są dozwolone dla tenant-id: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użyto nieprawidłowego punktu końcowego (kont osobistych i organizacji) sekcji Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje wdzierżawy. Aby uzyskać informacje na temat konwertowania aplikacji z jedną dzierżawą, zobacz Convert single-tenant app to multitenant on Microsoft Entra ID.

  1. StorageQueueTemplate jest automatycznie konfigurowany. Możesz automatycznie połączyć go bezpośrednio z własną fasolą w celu wysyłania lub odbierania komunikatów, jak pokazano w poniższym przykładzie:

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

Przykłady

Więcej informacji można znaleźć w azure-spring-boot-samples repozytorium w serwisie GitHub.