Spring Cloud Azure-Unterstützung für Spring Messaging Azure Storage Queue

In diesem Artikel wird beschrieben, wie Sie Spring Cloud Azure und Spring Messaging Azure Storage Queue verwenden können. Das Spring Framework bietet umfassende Unterstützung für die Integration in Messaging-Systeme.

Azure Storage-Warteschlange für Spring Messaging

Wichtige Begriffe

Azure Queue Storage ist ein Dienst zum Speichern großer Anzahl von Nachrichten. Sie greifen über authentifizierte Anrufe über HTTP oder HTTPS auf Nachrichten von überall auf der Welt zu. Eine Warteschlangennachricht kann bis zu 64 KB groß sein. Eine Warteschlange kann Millionen von Nachrichten bis zum Gesamtkapazitätslimit eines Speicherkontos enthalten. Warteschlangen werden häufig verwendet, um einen Arbeitsbestand zu erstellen, der asynchron verarbeitet werden kann. Das Spring Messaging für Azure Queue Storage-Projekt wendet kerne Spring-Konzepte auf die Entwicklung von service busbasierten Messaging-Lösungen an. Sie stellt eine Vorlage als allgemeine Abstraktion zum Senden und Empfangen von Nachrichten bereit. Diese Bibliotheken fördern die Verwendung von Abhängigkeitsinjektion und deklarativer Konfiguration.

Einrichtung von Abhängigkeiten

<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

Die Bibliothek bietet die folgenden Konfigurationsoptionen für StorageQueueTemplate:

Eigentum Typ BESCHREIBUNG
spring.cloud.azure.message-converter.isolated-object-mapper boolean Ob für den Nachrichtenkonverter der Storage Queue eine separate ObjectMapper-Bean verwendet wird. Standardmäßig aktiviert.
spring.cloud.azure.storage.queue.enabled boolean Gibt an, ob eine Azure Storage-Warteschlange aktiviert ist.
spring.cloud.azure.storage.queue.connection-string Schnur Wert der Verbindungszeichenfolge für den Namespace der Speicherwarteschlange.
spring.cloud.azure.storage.queue.accountName Schnur Name des Warteschlangenspeicherkontos.
spring.cloud.azure.storage.queue.accountKey Schnur Kontoschlüssel der Storage Queue.

Grundlegende Nutzung

Benutzerdefinierter Nachrichtenkonverter für Storage-Warteschlangen

Es gibt zwei Möglichkeiten, den Nachrichtenkonverter für Storage Queue zu konfigurieren:

  • Konfigurieren Sie die folgende Eigenschaft so, dass der standardmäßige Nachrichtenkonverter für die Storage Queue ein ObjectMapper-Bean verwendet, bei dem es sich um Ihr benutzerdefiniertes ObjectMapper-Bean oder um ein von Spring Boot verwaltetes Bean handeln kann:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definieren Sie die Bean für den Storage-Queue-Nachrichtenkonverter direkt:

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

Senden und Empfangen von Nachrichten an die Azure Storage-Warteschlange

Führen Sie die folgenden Schritte aus, um Nachrichten zu senden und zu empfangen:

  1. Füllen Sie die Optionen für die Konfiguration der Anmeldeinformationen mit einer der folgenden Methoden aus:

    • Konfigurieren Sie für Anmeldeinformationen als DefaultAzureCredential die folgenden Eigenschaften in Ihrer Datei application.yml:

      spring:
        cloud:
          azure:
            storage:
              queue:
                account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
      
    • Konfigurieren Sie für Anmeldeinformationen als Verbindungszeichenfolge die folgenden Eigenschaften in Ihrer application.yml Datei:

      spring:
        cloud:
          azure:
            storage:
              queue:
                connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}
      
    • Wenn Sie verwaltete Identitäten als Anmeldeinformationen verwenden, konfigurieren Sie die folgenden Eigenschaften in Ihrer application.yml-Datei:

      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}
      

Hinweis

Die folgenden Werte sind für tenant-idzulässig: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Falschen Endpunkt verwendet (persönliche Konten und Organisationskonten) in Fehler AADSTS50020 – Benutzerkonto des Identitätsanbieters ist im Mandanten nicht vorhanden. Informationen zum Umwandeln Ihrer Single-Tenant-App finden Sie unter Single-Tenant-App in eine Multitenant-App auf Microsoft Entra ID umwandeln.

  • Konfigurieren Sie für Anmeldeinformationen als Dienstprinzipal die folgenden Eigenschaften in Ihrer application.yml-Datei:

    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}
    

Hinweis

Die folgenden Werte sind für tenant-idzulässig: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Falschen Endpunkt verwendet (persönliche Konten und Organisationskonten) in Fehler AADSTS50020 – Benutzerkonto des Identitätsanbieters ist im Mandanten nicht vorhanden. Informationen zum Umwandeln Ihrer Single-Tenant-App finden Sie unter Single-Tenant-App in eine Multitenant-App auf Microsoft Entra ID umwandeln.

  1. StorageQueueTemplate wird automatisch konfiguriert. Sie können es per Autowiring direkt in Ihre eigenen Beans einbinden, um Nachrichten zu senden oder zu empfangen, wie das folgende Beispiel zeigt:

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

Beispiele

Weitere Informationen finden Sie im azure-spring-boot-samples Repository auf GitHub.