Spring Cloud Azure-Unterstützung für Spring Messaging Azure Event Hubs

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

Spring Messaging – Azure Event Hubs

Wichtige Begriffe

Azure Event Hubs ist ein systemeigener Datenstreamingdienst in der Cloud, der Millionen von Ereignissen pro Sekunde mit geringer Latenz von jeder Quelle zu jedem beliebigen Ziel streamen kann. Das Projekt Spring Messaging für Azure Event Hubs wendet kernige Spring-Konzepte auf die Entwicklung von Event Hubs-basierten Messaginglösungen an. Sie stellt eine Vorlage als allgemeine Abstraktion zum Senden von Nachrichten bereit. Sie bietet außerdem Unterstützung für nachrichtengesteuerte einfache Java-Objekte (POJOs) mit @EventHubsListener-Annotationen und einem Listener-Container. Diese Bibliotheken fördern die Verwendung von Abhängigkeitsinjektion und deklarativer Konfiguration. In all diesen Fällen können Sie Ähnlichkeiten mit der JMS-Unterstützung im Spring Framework und RabbitMQ-Support in Spring AMQP sehen.

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-eventhubs</artifactId>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
</dependency>

Konfiguration

Die Bibliothek bietet die folgenden Konfigurationsoptionen für EventHubsTemplate und @EventHubsListener:

Eigentum Typ BESCHREIBUNG
spring.cloud.azure.message-converter.isolated-object-mapper boolean Gibt an, ob ein isolierter ObjectMapper-Bean für den Ereignishub-Nachrichtenkonverter verwendet wird. Standardmäßig aktiviert.
spring.cloud.azure.eventhubs.enabled boolean Gibt an, ob azure Event Hubs aktiviert ist.
spring.cloud.azure.eventhubs.connection-string Schnur Event Hubs Namespace-Verbindungszeichenfolgenwert.
spring.cloud.azure.eventhubs.namespace Schnur Wert des Event Hubs-Namespace, der das Präfix des FQDN darstellt. Ein FQDN sollte aus NamespaceName.DomainName bestehen.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name Schnur Name für das Speicherkonto.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key Schnur Zugriffsschlüssel für Speicherkonto.
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name Schnur Name des Speichercontainers.

Grundlegende Nutzung

Benutzerdefinierter Event Hubs-Nachrichtenkonverter

Es gibt zwei Möglichkeiten zum Konfigurieren des Ereignishubs-Nachrichtenkonverters:

  • Konfigurieren Sie die folgende Eigenschaft so, dass der standardmäßige Event Hubs-Nachrichtenkonverter eine ObjectMapper-Bean verwendet, bei der es sich um Ihre benutzerdefinierte ObjectMapper-Bean oder um eine von Spring Boot verwaltete Bean handeln kann:

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

    @Bean
    AzureMessageConverter<EventData, EventData> eventHubsMessageConverter() {
        JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build();
        return new EventHubsMessageConverter(jsonMapper);
    }
    

Senden von Nachrichten an Azure Event Hubs

Gehen Sie folgendermaßen vor, um Nachrichten zu senden:

  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:
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
      
    • Konfigurieren Sie für Anmeldeinformationen als Verbindungszeichenfolge die folgenden Eigenschaften in Ihrer application.yml Datei:

      spring:
        cloud:
          azure:
            eventhubs:
              connection-string: ${AZURE_EVENT_HUBS_CONNECTION_STRING}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
                  account-key: ${CHECKPOINT-ACCESS-KEY}
      
    • 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}
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CONTAINER_NAME}
                  account-name: ${ACCOUNT_NAME}
      
    • 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>
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CONTAINER_NAME}
                  account-name: ${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. EventHubsTemplate ist automatisch konfiguriert, und Sie können es direkt in Ihre eigenen Bohnen verkabeln, wie im folgenden Beispiel gezeigt:

    @Component
    public class MyBean {
    
        private final EventHubsTemplate eventHubsTemplate;
    
        public MyBean(EventHubsTemplate eventHubsTemplate) {
            this.eventHubsTemplate = eventHubsTemplate;
        }
    
        public void someMethod() {
            this.eventHubsTemplate.sendAsync('EVENT_HUB_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe();
        }
    
    }
    

Empfangen von Nachrichten von Azure Event Hubs

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

  1. Füllen Sie die Konfigurationsoptionen für die Anmeldedaten aus.

  2. Fügen Sie die @EnableAzureMessaging Anmerkung hinzu, wie im folgenden Beispiel gezeigt. Diese Annotation löst die Erkennung von Methoden aus, die mit @EventHubsListener annotiert sind, und erstellt im Hintergrund den Message-Listener-Container.

    @SpringBootApplication
    @EnableAzureMessaging
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    Hinweis

    Um Wiederholungen zu vermeiden, wird die Annotation @EnableAzureMessaging seit Version 5.21.0 von Spring Cloud Azure automatisch aktiviert.

  3. Wenn die Event Hubs-Infrastruktur vorhanden ist, können Sie ein beliebiges Bean mit @EventHubsListener annotieren, um einen Listener-Endpunkt zu erstellen. Die folgende Komponente erstellt einen Listener-Endpunkt auf dem EVENT_HUB_NAME Event Hub und in der $Default Consumergruppe:

    @Component
    public class MyBean {
    
        @EventHubsListener(destination = "EVENT_HUB_NAME", group = "$Default")
        public void processMessage(String content) {
            // ...
        }
    
    }
    

Beispiele

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