Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 benutzerdefinierteObjectMapper-Bean oder um eine von Spring Boot verwaltete Bean handeln kann:spring: cloud: azure: message-converter: isolated-object-mapper: falseDefinieren 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:
Füllen Sie die Optionen für die Konfiguration der Anmeldeinformationen mit einer der folgenden Methoden aus:
Konfigurieren Sie für Anmeldeinformationen als
DefaultAzureCredentialdie 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.
EventHubsTemplateist 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:
Füllen Sie die Konfigurationsoptionen für die Anmeldedaten aus.
Fügen Sie die
@EnableAzureMessagingAnmerkung hinzu, wie im folgenden Beispiel gezeigt. Diese Annotation löst die Erkennung von Methoden aus, die mit@EventHubsListenerannotiert 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
@EnableAzureMessagingseit Version5.21.0von Spring Cloud Azure automatisch aktiviert.Wenn die Event Hubs-Infrastruktur vorhanden ist, können Sie ein beliebiges Bean mit
@EventHubsListenerannotieren, um einen Listener-Endpunkt zu erstellen. Die folgende Komponente erstellt einen Listener-Endpunkt auf demEVENT_HUB_NAMEEvent Hub und in der$DefaultConsumergruppe:@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.