Freigeben über


Schnellstart: Senden von Ereignissen an oder Empfangen von Ereignissen von Event Hubs mithilfe von JavaScript

In dieser Schnellstartanleitung erfahren Sie, wie Sie Ereignisse mithilfe des npm-Pakets @azure/event-hubs an einen Event Hub senden und ereignisse von einem Event Hub empfangen.

Wenn Sie mit Azure Event Hubs noch nicht fertig sind, lesen Sie die Übersicht über Event Hubs , bevor Sie beginnen.

Voraussetzungen

  • Microsoft Azure-Abonnement. Für die Verwendung von Azure-Diensten benötigen Sie ein Abonnement. Das gilt auch für Azure Event Hubs. Wenn Sie nicht über ein Azure-Konto verfügen, registrieren Sie sich für eine kostenlose Testversion.
  • Node.js LTS. Laden Sie die neueste ltS-Version (Long-Term Support) herunter.
  • Visual Studio Code (empfohlen) oder eine andere integrierte Entwicklungsumgebung (Integrated Development Environment, IDE)
  • Erstellen Sie einen Event Hubs-Namespace und einen Event Hub. Verwenden Sie das Azure-Portal , um einen Namespace vom Typ "Event Hubs" zu erstellen. Rufen Sie die Verwaltungsanmeldeinformationen ab, die Ihre Anwendung für die Kommunikation mit dem Event Hub benötigt. Weitere Informationen finden Sie unter Erstellen eines Event Hub mithilfe des Azure-Portals.

Installieren von npm-Paketen zum Senden von Ereignissen

Um das Node Package Manager (npm) Paket für Event Hubs zu installieren, öffnen Sie ein Eingabeaufforderungsfenster, bei dem npm in seinem Pfad enthalten ist. Ändern Sie das Verzeichnis in den Ordner, in dem Sie Ihre Beispiele speichern möchten.

Führen Sie diese Befehle aus:

npm install @azure/event-hubs
npm install @azure/identity

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:

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.

  1. Navigieren Sie im Azure-Portal zu Ihrem Event Hubs-Namespace. Verwenden Sie dazu entweder die Hauptsuchleiste oder die linke Navigationsleiste.

  2. Wählen Sie auf der Übersichtsseite im linken Menü die Option Zugriffssteuerung (IAM) aus.

  3. Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Registerkarte Rollenzuweisungen aus.

  4. Wählen Sie im oberen Menü +Hinzufügen aus. Wählen Sie dann " Rollenzuweisung hinzufügen" aus.

    Screenshot, der zeigt, wie eine Rolle zugewiesen wird.

  5. Ü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.

  6. Wählen Sie unter Zugriff zuweisen für die Option Benutzer, Gruppe oder Dienstprinzipal aus. Wählen Sie dann +Mitglieder auswählen.

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

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

Senden von Ereignissen

In diesem Abschnitt erstellen Sie eine JavaScript-Anwendung, die Ereignisse an einen Event Hub sendet.

  1. Öffnen Sie einen Text-Editor, z. B. Visual Studio Code.

  2. Erstellen Sie eine Datei namenssend.js. Fügen Sie den folgenden Code in ihn ein:

    Ersetzen Sie im Code die folgenden Platzhalter durch echte Werte:

    • EVENT HUBS NAMESPACE NAME
    • EVENT HUB NAME
    const { EventHubProducerClient } = require("@azure/event-hubs");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Event hubs 
    const eventHubsResourceName = "EVENT HUBS NAMESPACE NAME";
    const fullyQualifiedNamespace = `${eventHubsResourceName}.servicebus.windows.net`; 
    const eventHubName = "EVENT HUB NAME";
    
    // Azure Identity - passwordless authentication
    const credential = new DefaultAzureCredential();
    
    async function main() {
    
      // Create a producer client to send messages to the event hub.
      const producer = new EventHubProducerClient(fullyQualifiedNamespace, eventHubName, credential);
    
      // Prepare a batch of three events.
      const batch = await producer.createBatch();
      batch.tryAdd({ body: "passwordless First event" });
      batch.tryAdd({ body: "passwordless Second event" });
      batch.tryAdd({ body: "passwordless Third event" });    
    
      // Send the batch to the event hub.
      await producer.sendBatch(batch);
    
      // Close the producer client.
      await producer.close();
    
      console.log("A batch of three events have been sent to the event hub");
    }
    
    main().catch((err) => {
      console.log("Error occurred: ", err);
    });
    
  3. Verwenden Sie den folgenden Befehl, um die Anwendung auszuführen:

    node send.js
    

    Der Befehl sendet einen Batch von drei Ereignissen an ihren Event Hub.

    Wenn Sie die kennwortlose Authentifizierung (Microsoft Entra ID Role-based access control, RBAC) verwenden, müssen Sie sich möglicherweise mit dem Konto anmelden, das Sie der Azure Event Hubs-Datenbesitzerrolle hinzugefügt haben. Verwenden Sie den Befehl az login.

  4. Überprüfen Sie im Azure-Portal, ob der Event Hub die Nachrichten empfangen hat. Um das Diagramm zu aktualisieren, aktualisieren Sie die Seite. Es kann einige Sekunden dauern, bis der Empfang der Nachrichten angezeigt wird.

    Screenshot der Seite

    Hinweis

    Weitere Informationen und den vollständigen Quellcode finden Sie auf der GitHub-sendEvents.js-Seite.

Empfangen von Ereignissen

In diesem Abschnitt erhalten Sie Ereignisse von einem Event Hub mithilfe eines Azure Blob Storage-Prüfpunktspeichers in einer JavaScript-Anwendung. Er führt Metadatenprüfpunkte für empfangene Nachrichten in regelmäßigen Abständen in einem Azure Storage-Blob aus. Dadurch kann der Empfang von Nachrichten später problemlos an der Stelle fortgesetzt werden, an der Sie aufgehört haben.

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-Speicherkontos und eines Blobcontainers

So erstellen Sie ein Azure-Speicherkonto mit einem BLOB-Container:

  1. Erstellen eines Azure-Speicherkontos
  2. Erstellen Sie einen Blob-Container im Speicherkonto
  3. 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.

  1. Suchen Sie im Azure-Portal Ihr Speicherkonto mithilfe der Hauptsuchleiste oder der linken Navigationsleiste.

  2. Wählen Sie auf der Seite "Speicherkonto" im linken Menü die Zugriffssteuerung (IAM) aus.

  3. Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Registerkarte Rollenzuweisungen aus.

  4. Wählen Sie im oberen Menü +Hinzufügen aus. Wählen Sie dann " Rollenzuweisung hinzufügen" aus.

    Screenshot, der zeigt, wie Sie eine Speicherkontorolle zuweisen.

  5. Ü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.

  6. Wählen Sie unter Zugriff zuweisen zu die Option Benutzer, Gruppe oder Dienstprinzipal und dann die Option + Mitglieder auswählen aus.

  7. Suchen Sie im Dialogfeld nach Ihrem Microsoft Entra-Benutzernamen (in der Regel Ihre user@domain-E-Mail-Adresse), und wählen Sie dann unten im Dialogfeld Auswählen aus.

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

Installieren der npm-Pakete zum Empfangen von Ereignissen

Für die empfangende Seite müssen Sie zwei weitere Pakete installieren. In dieser Schnellstartanleitung verwenden Sie Azure Blob Storage, um Prüfpunkte beizubehalten, damit das Programm die bereits gelesenen Ereignisse nicht liest. In einem Blob werden für empfangene Nachrichten in regelmäßigen Abständen Metadatenprüfpunkte erstellt. Dadurch kann der Empfang von Nachrichten später problemlos an der Stelle fortgesetzt werden, an der Sie aufgehört haben.

Führen Sie diese Befehle aus:

npm install @azure/storage-blob
npm install @azure/eventhubs-checkpointstore-blob
npm install @azure/identity

Schreiben von Code zum Empfangen von Ereignissen

  1. Öffnen Sie einen Text-Editor, z. B. Visual Studio Code.

  2. Erstellen Sie eine Datei namensreceive.js. Fügen Sie den folgenden Code in ihn ein:

    Ersetzen Sie im Code die folgenden Platzhalter durch echte Werte:

    • EVENT HUBS NAMESPACE NAME
    • EVENT HUB NAME
    • STORAGE ACCOUNT NAME
    • STORAGE CONTAINER NAME
    const { DefaultAzureCredential } = require("@azure/identity");
    const { EventHubConsumerClient, earliestEventPosition  } = require("@azure/event-hubs");
    const { ContainerClient } = require("@azure/storage-blob");    
    const { BlobCheckpointStore } = require("@azure/eventhubs-checkpointstore-blob");
    
    // Event hubs 
    const eventHubsResourceName = "EVENT HUBS NAMESPACE NAME";
    const fullyQualifiedNamespace = `${eventHubsResourceName}.servicebus.windows.net`; 
    const eventHubName = "EVENT HUB NAME";
    const consumerGroup = "$Default"; // name of the default consumer group
    
    // Azure Storage 
    const storageAccountName = "STORAGE ACCOUNT NAME";
    const storageContainerName = "STORAGE CONTAINER NAME";
    const baseUrl = `https://${storageAccountName}.blob.core.windows.net`;
    
    // Azure Identity - passwordless authentication
    const credential = new DefaultAzureCredential();
    
    async function main() {
    
      // Create a blob container client and a blob checkpoint store using the client.
      const containerClient = new ContainerClient(
        `${baseUrl}/${storageContainerName}`,
        credential
      );  
      const checkpointStore = new BlobCheckpointStore(containerClient);
    
      // Create a consumer client for the event hub by specifying the checkpoint store.
      const consumerClient = new EventHubConsumerClient(consumerGroup, fullyQualifiedNamespace, eventHubName, credential, checkpointStore);
    
      // Subscribe to the events, and specify handlers for processing the events and errors.
      const subscription = consumerClient.subscribe({
          processEvents: async (events, context) => {
            if (events.length === 0) {
              console.log(`No events received within wait time. Waiting for next interval`);
              return;
            }
    
            for (const event of events) {
              console.log(`Received event: '${event.body}' from partition: '${context.partitionId}' and consumer group: '${context.consumerGroup}'`);
            }
            // Update the checkpoint.
            await context.updateCheckpoint(events[events.length - 1]);
          },
    
          processError: async (err, context) => {
            console.log(`Error : ${err}`);
          }
        },
        { startPosition: earliestEventPosition }
      );
    
      // After 30 seconds, stop processing.
      await new Promise((resolve) => {
        setTimeout(async () => {
          await subscription.close();
          await consumerClient.close();
          resolve();
        }, 30000);
      });
    }
    
    main().catch((err) => {
      console.log("Error occurred: ", err);
    });
    
  3. Verwenden Sie den Befehl node receive.js, um diesen Code auszuführen. Im Fenster werden Meldungen zu empfangenen Ereignissen angezeigt.

    C:\Self Study\Event Hubs\JavaScript>node receive.js
    Received event: 'First event' from partition: '0' and consumer group: '$Default'
    Received event: 'Second event' from partition: '0' and consumer group: '$Default'
    Received event: 'Third event' from partition: '0' and consumer group: '$Default'
    

    Hinweis

    Den vollständigen Quellcode, einschließlich Informationskommentaren, finden Sie unterreceiveEventsUsingCheckpointStore.js.

    Das Empfängerprogramm empfängt Ereignisse von allen Partitionen der Standardconsumergruppe im Event Hub.

Bereinigen von Ressourcen

Löschen Sie die Ressourcengruppe mit dem Event Hubs-Namespace, oder löschen Sie nur den Namespace, wenn Sie die Ressourcengruppe behalten möchten.