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 dieser Schnellstartanleitung erfahren Sie, wie Sie Ereignisse mithilfe des Java-Pakets azure-messaging-eventhubs an einen Azure Event Hub senden und ereignisse von einem Azure Event Hub empfangen.
Tipp
Wenn Sie mit Azure Event Hubs-Ressourcen in einer Spring-Anwendung arbeiten, empfiehlt es sich, Spring Cloud Azure als Alternative in Betracht zu ziehen. Spring Cloud Azure ist ein Open-Source-Projekt, das eine nahtlose Spring-Integration mit Azure-Diensten ermöglicht. Weitere Informationen zu Spring Cloud Azure und ein Beispiel für die Verwendung von Event Hubs finden Sie unter Spring Cloud Stream mit Azure Event Hubs.
Voraussetzungen
Wenn Sie mit Azure Event Hubs noch nicht vertraut sind, lesen Sie vor dem Durcharbeiten dieser Schnellstartanleitung die Informationen unter Übersicht über Event Hubs.
Zum Durchführen dieser Schnellstartanleitung benötigen Sie Folgendes:
- Microsoft Azure-Abonnement. Für die Verwendung von Azure-Diensten benötigen Sie ein Abonnement. Das gilt auch für Azure Event Hubs. Falls Sie noch nicht über ein Azure-Konto verfügen, können Sie sich für eine kostenlose Testversion registrieren oder beim Erstellen eines Kontos Ihre MSDN-Abonnentenvorteile nutzen.
- Eine Java-Entwicklungsumgebung. Diese Schnellstartanleitung verwendet Eclipse. Java Development Kit (JDK) mit Version 8 oder höher ist erforderlich.
- Erstellen Sie einen Event Hubs-Namespace und einen Event Hub. Der erste Schritt besteht darin, das Azure-Portal zum Erstellen eines Namespace vom Typ "Event Hubs" zu verwenden und die Verwaltungsanmeldeinformationen abzurufen, die Ihre Anwendung für die Kommunikation mit dem Event Hub benötigt. Erstellen Sie anhand der Anleitung in diesem Artikel einen Namespace und einen Event Hub. Rufen Sie dann die Verbindungszeichenfolge für den Event Hubs-Namespace ab, indem Sie die folgenden Anweisungen aus dem Artikel abrufen: Verbindungszeichenfolge abrufen. Sie verwenden die Verbindungszeichenfolge später in dieser Schnellstartanleitung.
Senden von Ereignissen
In diesem Abschnitt erfahren Sie, wie Sie eine Java-Anwendung erstellen, um Ereignisse an einen Event Hub zu senden.
Hinzufügen eines Verweises auf die Azure Event Hubs-Bibliothek
Erstellen Sie zunächst ein neues Maven-Projekt für eine Konsolen-/Shellanwendung in Ihrer bevorzugten Java-Entwicklungsumgebung. Aktualisieren Sie die pom.xml
Datei wie folgt. Die Java-Clientbibliothek für Event Hubs ist im Maven Central Repository verfügbar.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs</artifactId>
<version>5.20.2</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.16.1</version>
<scope>compile</scope>
</dependency>
Hinweis
Aktualisieren Sie die Version auf die neueste Version, die im Maven-Repository veröffentlicht wurde.
Authentifizieren der App bei Azure
In dieser Schnellstartanleitung werden zwei Möglichkeiten zum Herstellen einer Verbindung mit Azure Event Hubs gezeigt:
- Kennwortlos. Verwenden Sie Ihren Sicherheitsprinzipal in Microsoft Entra ID und die rollenbasierte Zugriffssteuerung (RBAC), um eine Verbindung zu einem Event Hubs Namespace herzustellen. Sie müssen sich keine Gedanken darüber machen, dass hartcodierte Verbindungszeichenfolgen in Ihrem Code, in einer Konfigurationsdatei oder im sicheren Speicher wie Azure Key Vault vorhanden sind.
- Verbindungszeichenfolge. Verwenden Sie eine Verbindungszeichenfolge, um eine Verbindung mit einem Event Hubs-Namespace herzustellen. Wenn Sie noch nicht mit Azure vertraut sind, ist die Option mit einer Verbindungszeichenfolge möglicherweise einfacher.
In realen Anwendungen und Produktionsumgebungen wird die kennwortlose Option empfohlen. Weitere Informationen finden Sie unter Service Bus-Authentifizierung und Autorisierung und kennwortloseVerbindungen für Azure-Dienste.
Zuweisen von Rollen zu Ihrem Microsoft Entra-Benutzer
Stellen Sie bei der lokalen Entwicklung sicher, dass das Benutzerkonto, das eine Verbindung mit Azure Event Hubs herstellt, über die richtigen Berechtigungen verfügt. Sie benötigen die Azure Event Hubs-Rolle "Datenbesitzer ", um Nachrichten zu senden und zu empfangen. Um sich selbst diese Rolle zuzuweisen, benötigen Sie die Rolle des Benutzerzugriffsadministrators oder eine andere Rolle, die die Microsoft.Authorization/roleAssignments/write
Aktion enthält. Sie können einem Benutzer Azure RBAC-Rollen über das Azure-Portal, die Azure CLI oder mit Azure PowerShell zuweisen. Weitere Informationen finden Sie auf der Seite Umfang von Azure RBAC verstehen.
Im folgenden Beispiel wird Ihrem Benutzerkonto die Rolle Azure Event Hubs Data Owner
zugewiesen. Diese Rolle bietet Vollzugriff auf Azure Event Hubs-Ressourcen. Halten Sie sich in einem echten Szenario an das Prinzip der geringsten Rechte, um Benutzern nur die benötigten Mindestberechtigungen zu erteilen und so die Produktionsumgebung besser zu schützen.
In Azure integrierte Rollen für Azure Event Hubs
Bei Azure Event Hubs ist die Verwaltung der Namespaces und aller zugehörigen Ressourcen über das Azure-Portal und die Azure-Ressourcenverwaltungs-API bereits durch das Azure RBAC-Modell geschützt. Azure bietet die folgenden integrierten Rollen zum Autorisieren des Zugriffs auf einen Event Hubs-Namespace:
- Azure Event Hubs-Datenbesitzer: Ermöglicht den Datenzugriff auf den Event Hubs-Namespace und seine Entitäten (Warteschlangen, Themen, Abonnements und Filter).
- Azure Event Hubs-Datensender: Verwenden Sie diese Rolle, um dem Event Hubs-Namespace und seinen Entitäten Sendezugriff zu erteilen.
- Azure Event Hubs-Datenempfänger: Verwenden Sie diese Rolle, um dem Event Hubs-Namespace und seinen Entitäten Empfangszugriff zu erteilen.
Informationen zum Erstellen einer benutzerdefinierten Rolle finden Sie unter Erforderliche Rechte für Event Hubs-Vorgänge.
Von Bedeutung
In der Regel dauert die Verteilung der Rollenzuweisung in Azure ein bis zwei Minuten. In seltenen Fällen kann es bis zu acht Minuten dauern. Wenn bei der ersten Ausführung Ihres Codes Authentifizierungsfehler auftreten, warten Sie einige Momente, und versuchen Sie es dann erneut.
Navigieren Sie im Azure-Portal zu Ihrem Event Hubs-Namespace. Verwenden Sie dazu entweder die Hauptsuchleiste oder die linke Navigationsleiste.
Wählen Sie auf der Übersichtsseite im linken Menü die Option Zugriffssteuerung (IAM) aus.
Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Registerkarte Rollenzuweisungen aus.
Wählen Sie im oberen Menü +Hinzufügen aus. Wählen Sie dann " Rollenzuweisung hinzufügen" aus.
Über das Suchfeld können Sie die Ergebnisse für die gewünschte Rolle filtern. Suchen Sie in diesem Beispiel nach
Azure Event Hubs Data Owner
, und wählen Sie das entsprechende Ergebnis aus. Klicken Sie dann auf Weiter.Wählen Sie unter Zugriff zuweisen für die Option Benutzer, Gruppe oder Dienstprinzipal aus. Wählen Sie dann +Mitglieder auswählen.
Suchen Sie im Dialogfeld nach Ihrem Microsoft Entra-Benutzernamen (normalerweise Ihre user@___domain E-Mail-Adresse). Wählen Sie unten im Dialogfeld "Auswählen" aus.
Wählen Sie "Überprüfen" und "Zuweisen" aus, um zur endgültigen Seite zu wechseln. Wählen Sie „Überprüfen + zuweisen“ erneut aus, um den Vorgang abzuschließen.
Schreiben von Code zum Senden von Nachrichten an den Event Hub
Fügen Sie eine Klasse mit dem Namen Sender
hinzu, und fügen Sie der Klasse den folgenden Code hinzu:
Von Bedeutung
- Aktualisieren Sie
<NAMESPACE NAME>
mit dem Namen Ihres Event Hubs-Namespaces. - Aktualisieren Sie
<EVENT HUB NAME>
mit dem Namen Ihres Event Hubs.
package ehubquickstart;
import com.azure.messaging.eventhubs.*;
import java.util.Arrays;
import java.util.List;
import com.azure.identity.*;
public class SenderAAD {
// replace <NAMESPACE NAME> with the name of your Event Hubs namespace.
// Example: private static final String namespaceName = "contosons.servicebus.windows.net";
private static final String namespaceName = "<NAMESPACE NAME>.servicebus.windows.net";
// Replace <EVENT HUB NAME> with the name of your event hub.
// Example: private static final String eventHubName = "ordersehub";
private static final String eventHubName = "<EVENT HUB NAME>";
public static void main(String[] args) {
publishEvents();
}
/**
* Code sample for publishing events.
* @throws IllegalArgumentException if the EventData is bigger than the max batch size.
*/
public static void publishEvents() {
// create a token using the default Azure credential
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
.build();
// create a producer client
EventHubProducerClient producer = new EventHubClientBuilder()
.fullyQualifiedNamespace(namespaceName)
.eventHubName(eventHubName)
.credential(credential)
.buildProducerClient();
// sample events in an array
List<EventData> allEvents = Arrays.asList(new EventData("Foo"), new EventData("Bar"));
// create a batch
EventDataBatch eventDataBatch = producer.createBatch();
for (EventData eventData : allEvents) {
// try to add the event from the array to the batch
if (!eventDataBatch.tryAdd(eventData)) {
// if the batch is full, send it and then create a new batch
producer.send(eventDataBatch);
eventDataBatch = producer.createBatch();
// Try to add that event that couldn't fit before.
if (!eventDataBatch.tryAdd(eventData)) {
throw new IllegalArgumentException("Event is too large for an empty batch. Max size: "
+ eventDataBatch.getMaxSizeInBytes());
}
}
}
// send the last batch of remaining events
if (eventDataBatch.getCount() > 0) {
producer.send(eventDataBatch);
}
producer.close();
}
}
Erstellen Sie das Programm, und stellen Sie sicher, dass keine Fehler vorhanden sind. Sie führen dieses Programm aus, nachdem Sie das Empfängerprogramm ausgeführt haben.
Empfangen von Ereignissen
Der Code in diesem Lernprogramm basiert auf dem EventProcessorClient-Beispiel auf GitHub, das Sie untersuchen können, um die vollständige funktionierende Anwendung anzuzeigen.
Befolgen Sie diese Empfehlungen, wenn Sie Azure Blob Storage als Prüfpunktspeicher verwenden:
- Verwenden Sie einen separaten Container für jede Consumergruppe. Sie können dasselbe Speicherkonto verwenden, aber verwenden Sie für jede Gruppe einen eigenen Container.
- Verwenden Sie das Speicherkonto nicht für andere Elemente.
- Verwenden Sie den Container nicht für andere Elemente.
- Erstellen Sie das Speicherkonto in derselben Region wie die bereitgestellte Anwendung. Wenn die Anwendung lokal ist, versuchen Sie, die nächstgelegene Region auszuwählen.
Stellen Sie auf der Seite Speicherkonto im Azure-Portal im Abschnitt Blobdienst sicher, dass die folgenden Einstellungen deaktiviert sind.
- Hierarchischer Namespace
- Vorläufiges Löschen von Blobs
- Versionsverwaltung
Erstellen eines Azure Storage-Containers und eines Blobcontainers
In dieser Schnellstartanleitung verwenden Sie Azure Storage (insbesondere Blob Storage) als Prüfpunktspeicher. Das Festlegen von Prüfpunkten ist ein Vorgang, durch den ein Ereignisprozessor die Position des letzten erfolgreich verarbeiteten Ereignisses innerhalb einer Partition markiert oder committet. Das Markieren eines Prüfpunkts erfolgt in der Regel innerhalb der Funktion, die die Ereignisse verarbeitet. Weitere Informationen zu Prüfpunkten finden Sie unter Ereignisprozessor.
Führen Sie die folgenden Schritte aus, um ein Azure Storage-Konto zu erstellen:
- Erstellen eines Azure-Speicherkontos
- Erstellen eines Blobcontainers
- Authentifizieren beim Blobcontainer
Stellen Sie bei der lokalen Entwicklung sicher, dass das Benutzerkonto, das auf BLOB-Daten zugreift, über die richtigen Berechtigungen verfügt. Sie benötigen die Berechtigung Mitwirkender an Speicherblobdaten zum Lesen und Schreiben von Blobdaten. Um sich selbst diese Rolle zuzuweisen, müssen Sie der Rolle "Benutzerzugriffsadministrator " oder einer anderen Rolle zugewiesen werden, die die Aktion "Microsoft.Authorization/roleAssignments/write " enthält. Sie können einem Benutzer Azure RBAC-Rollen über das Azure-Portal, die Azure CLI oder mit Azure PowerShell zuweisen. Weitere Informationen finden Sie in der Grundlegendes zum Bereich von Azure RBAC.
In diesem Szenario weisen Sie Ihrem Benutzerkonto Berechtigungen zu, die auf das Speicherkonto festgelegt sind, um dem Prinzip der geringsten Rechte zu folgen. Auf diese Weise erhalten Benutzer nur die erforderlichen Mindestberechtigungen, und es entstehen sicherere Produktionsumgebungen.
Im folgenden Beispiel wird Ihrem Benutzerkonto die Rolle " Storage Blob Data Contributor" zugewiesen, die sowohl Lese- als auch Schreibzugriff auf BLOB-Daten in Ihrem Speicherkonto bietet.
Von Bedeutung
In der Regel dauert die Verteilung der Rollenzuweisung in Azure ein bis zwei Minuten. In seltenen Fällen kann es bis zu acht Minuten dauern. Wenn bei der ersten Ausführung Ihres Codes Authentifizierungsfehler auftreten, warten Sie einige Momente, und versuchen Sie es dann erneut.
Suchen Sie im Azure-Portal Ihr Speicherkonto mithilfe der Hauptsuchleiste oder der linken Navigationsleiste.
Wählen Sie auf der Seite "Speicherkonto" im linken Menü die Zugriffssteuerung (IAM) aus.
Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Registerkarte Rollenzuweisungen aus.
Wählen Sie im oberen Menü +Hinzufügen aus. Wählen Sie dann " Rollenzuweisung hinzufügen" aus.
Über das Suchfeld können Sie die Ergebnisse für die gewünschte Rolle filtern. Suchen Sie in diesem Beispiel nach Storage Blob Data Contributor. Wählen Sie das übereinstimmende Ergebnis aus, und wählen Sie dann Nextaus.
Wählen Sie unter Zugriff zuweisen zu die Option Benutzer, Gruppe oder Dienstprinzipal und dann die Option + Mitglieder auswählen aus.
Suchen Sie im Dialogfeld nach Ihrem Microsoft Entra-Benutzernamen (normalerweise Ihre E-Mail-Adresse benutzer@domäne), und wählen Sie unten im Dialogfeld Auswählen aus.
Wählen Sie "Überprüfen" und "Zuweisen" aus, um zur endgültigen Seite zu wechseln. Wählen Sie „Überprüfen + zuweisen“ erneut aus, um den Vorgang abzuschließen.
Hinzufügen von Event Hubs-Bibliotheken zu Ihrem Java-Projekt
Fügen Sie die folgenden Abhängigkeiten in der datei pom.xml hinzu.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs</artifactId>
<version>5.20.2</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
<version>1.20.6</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.16.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
Fügen Sie die folgenden
import
Anweisungen oben in der Java-Datei hinzu.import com.azure.messaging.eventhubs.*; import com.azure.messaging.eventhubs.checkpointstore.blob.BlobCheckpointStore; import com.azure.messaging.eventhubs.models.*; import com.azure.storage.blob.*; import java.util.function.Consumer; import com.azure.identity.*;
Erstellen Sie eine Klasse mit dem Namen
Receiver
, und fügen Sie der Klasse die folgenden Zeichenfolgenvariablen hinzu. Ersetzen Sie die Platzhalter durch die richtigen Werte.Von Bedeutung
Ersetzen Sie die Platzhalter durch die richtigen Werte.
-
<NAMESPACE NAME>
durch den Namen Ihres Event Hubs-Namespace. -
<EVENT HUB NAME>
durch den Namen Ihres Event Hubs im Namespace
private static final String namespaceName = "<NAMESPACE NAME>.servicebus.windows.net"; private static final String eventHubName = "<EVENT HUB NAME>";
-
Fügen Sie der Klasse die folgende
main
Methode hinzu.Von Bedeutung
Ersetzen Sie die Platzhalter durch die richtigen Werte.
-
<STORAGE ACCOUNT NAME>
mit dem Namen Ihres Azure Storage-Kontos. -
<CONTAINER NAME>
mit dem Namen des Blob-Containers im Speicherkonto
// create a token using the default Azure credential DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD) .build(); // Create a blob container client that you use later to build an event processor client to receive and process events BlobContainerAsyncClient blobContainerAsyncClient = new BlobContainerClientBuilder() .credential(credential) .endpoint("https://<STORAGE ACCOUNT NAME>.blob.core.windows.net") .containerName("<CONTAINER NAME>") .buildAsyncClient(); // Create an event processor client to receive and process events and errors. EventProcessorClient eventProcessorClient = new EventProcessorClientBuilder() .fullyQualifiedNamespace(namespaceName) .eventHubName(eventHubName) .consumerGroup(EventHubClientBuilder.DEFAULT_CONSUMER_GROUP_NAME) .processEvent(PARTITION_PROCESSOR) .processError(ERROR_HANDLER) .checkpointStore(new BlobCheckpointStore(blobContainerAsyncClient)) .credential(credential) .buildEventProcessorClient(); System.out.println("Starting event processor"); eventProcessorClient.start(); System.out.println("Press enter to stop."); System.in.read(); System.out.println("Stopping event processor"); eventProcessorClient.stop(); System.out.println("Event processor stopped."); System.out.println("Exiting process");
-
Fügen Sie die beiden Hilfsmethoden (
PARTITION_PROCESSOR
undERROR_HANDLER
), die Ereignisse und Fehler verarbeiten, derReceiver
-Klasse hinzu.public static final Consumer<EventContext> PARTITION_PROCESSOR = eventContext -> { PartitionContext partitionContext = eventContext.getPartitionContext(); EventData eventData = eventContext.getEventData(); System.out.printf("Processing event from partition %s with sequence number %d with body: %s%n", partitionContext.getPartitionId(), eventData.getSequenceNumber(), eventData.getBodyAsString()); // Every 10 events received, it will update the checkpoint stored in Azure Blob Storage. if (eventData.getSequenceNumber() % 10 == 0) { eventContext.updateCheckpoint(); } }; public static final Consumer<ErrorContext> ERROR_HANDLER = errorContext -> { System.out.printf("Error occurred in partition processor for partition %s, %s.%n", errorContext.getPartitionContext().getPartitionId(), errorContext.getThrowable()); };
Erstellen Sie das Programm, und stellen Sie sicher, dass keine Fehler vorhanden sind.
Ausführen der Anwendungen
Führen Sie zuerst die Empfängeranwendung aus .
Führen Sie dann die Sender-Anwendung aus.
Vergewissern Sie sich im Anwendungsfenster "Empfänger ", dass die Ereignisse angezeigt werden, die von der Sender-Anwendung veröffentlicht wurden.
Starting event processor Press enter to stop. Processing event from partition 0 with sequence number 331 with body: Foo Processing event from partition 0 with sequence number 332 with body: Bar
Drücken Sie die EINGABETASTE im Empfängeranwendungsfenster, um die Anwendung zu beenden.
Starting event processor Press enter to stop. Processing event from partition 0 with sequence number 331 with body: Foo Processing event from partition 0 with sequence number 332 with body: Bar Stopping event processor Event processor stopped. Exiting process
Verwandte Inhalte
Im Folgenden sind auf GitHub verfügbare Beispiele aufgeführt: