Obsługa usługi Spring Cloud Azure dla kolejki usługi Azure Storage Spring Messaging

W tym artykule opisano sposób używania usługi Spring Cloud Azure i kolejki usługi Azure Storage Spring Messaging. 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 do całkowitego limitu pojemności konta magazynu. 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 izolowany fasola ObjectMapper jest używany do konwertera komunikatów kolejki usługi Storage. 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ść parametrów połączenia przestrzeni nazw kolejki magazynu.
spring.cloud.azure.storage.queue.accountName Sznurek Nazwa konta kolejki usługi Storage.
spring.cloud.azure.storage.queue.accountKey Sznurek Klucz konta kolejki usługi Storage.

Podstawowy sposób użycia

Konwerter komunikatów kolejki usługi Custom Storage

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

  • Skonfiguruj następującą właściwość, aby domyślny konwerter komunikatów kolejki usługi Storage używał fasoli, która może być niestandardową ObjectMapper fasolą lub jedną zarządzaną przez platformę ObjectMapper Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Zdefiniuj bezpośrednio fasolę konwertera komunikatów kolejki magazynu:

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

Wysyłanie i odbieranie komunikatów do kolejki usługi Azure Storage

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:

    • W przypadku poświadczeń jako DefaultAzureCredentialskonfiguruj następujące właściwości w pliku application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • W przypadku poświadczeń jako parametrów 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ń jako 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

Aby uzyskać więcej informacji, zobacz azure-spring-boot-samples repozytorium w witrynie GitHub.