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.

Setup 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 Boolescher Wert Gibt an, ob ein isolierter ObjectMapper-Bean für den Nachrichtenkonverter der Speicherwarteschlange verwendet wird. Standardmäßig aktiviert.
spring.cloud.azure.storage.queue.enabled Boolescher Wert Gibt an, ob eine Azure Storage-Warteschlange aktiviert ist.
spring.cloud.azure.storage.queue.connection-string Schnur Namespace-Verbindungszeichenfolgenwert der Speicherwarteschlange.
spring.cloud.azure.storage.queue.accountName Schnur Name des Speicherwarteschlangenkontos.
spring.cloud.azure.storage.queue.accountKey Schnur Speicherwarteschlangenkontoschlüssel.

Grundlegende Nutzung

Benutzerdefinierter Nachrichtenkonverter für die Speicherwarteschlange

Es gibt zwei Möglichkeiten zum Konfigurieren des Nachrichtenkonverters für die Speicherwarteschlange:

  • Konfigurieren Sie die folgende Eigenschaft so, dass der standardmäßige Nachrichtenkonverter für die Speicherwarteschlange eine Warteschlange verwendet ObjectMapper , bei der es sich um Ihren benutzerdefinierten ObjectMapper Bean oder eine vom Spring Boot verwaltete Warteschlange handelt:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definieren Sie den Nachrichtenkonverter für die Speicherwarteschlange 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 Konfigurationsoptionen für Anmeldeinformationen mit einem der folgenden Ansätze aus:

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

      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}
      
    • Konfigurieren Sie für Anmeldeinformationen als verwaltete Identitäten 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 Abschnitt Abschnitt Fehler-AADSTS50020 – Benutzerkonto des Identitätsanbieters ist nicht im Mandantenvorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in multitenant auf Microsoft Entra ID.

  • 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 Abschnitt Abschnitt Fehler-AADSTS50020 – Benutzerkonto des Identitätsanbieters ist nicht im Mandantenvorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in multitenant auf Microsoft Entra ID.

  1. StorageQueueTemplate wird automatisch konfiguriert. Sie können es direkt in Ihre eigenen Bohnen verkabeln, um Nachrichten zu senden oder zu empfangen, wie im folgenden Beispiel gezeigt:

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