Freigeben über


Schnellstart: Senden von Nachrichten an und Empfangen von Nachrichten aus Azure Service Bus-Warteschlangen (JavaScript)

Diese Schnellstartanleitung enthält schrittweise Anleitungen für ein einfaches Szenario zum Senden von Nachrichten an eine ServiceBus-Warteschlange und zum Empfangen dieser Nachrichten. In dieser Schnellstartanleitung führen Sie die folgenden Aufgaben aus:

  • Erstellen eines Service Bus-Namespace mithilfe des Azure-Portals

  • Erstellen einer Service Bus-Warteschlange mithilfe des Azure-Portals

  • Schreiben Sie eine JavaScript-Anwendung, um das @azure/service-bus-Paket zu verwenden, um Folgendes zu tun:

    • Senden einer Reihe von Nachrichten an die Warteschlange
    • Empfangen von Nachrichten aus der Warteschlange

Sie finden vordefinierte JavaScript- und TypeScript-Beispiele für Azure Service Bus im Azure SDK für JavaScript-Repository auf GitHub.

Wenn Sie neu bei dem Dienst sind, lesen Sie die Übersicht über den ServiceBus, bevor Sie beginnen.

Voraussetzungen

Um diese Schnellstartanleitung mit Ihrem eigenen Azure-Konto verwenden zu können, wird Folgendes vorausgesetzt:

  • Installieren Sie die Azure CLI, um die kennwortlose Authentifizierung für Ihren Entwicklercomputer zu ermöglichen.
  • Melden Sie sich mit Ihrem Azure-Konto an einer Eingabeaufforderung mit az login an.
  • Verwenden Sie das gleiche Konto, wenn Sie Ihrer Ressource die entsprechende Datenrolle hinzufügen.
  • Führen Sie den Code im gleichen Eingabeaufforderungsfenster aus.
  • Notieren Sie sich ihren Warteschlangennamen für den Service Bus-Namespace. Sie benötigen dies im Code.

Hinweis

Dieses Tutorial funktioniert für die Beispiele, die Sie mit Node.js kopieren und ausführen können. Anweisungen zum Erstellen von Node.js-Anwendungen finden Sie unter Erstellen einer Node.js-Web-App in Azure und Erstellen und Bereitstellen einer Node.js-Anwendung in einem Azure-Clouddienst.

Erstellen eines Namespace im Azure-Portal

Um mit der Verwendung von Service Bus-Nachrichtenentitäten in Azure zu beginnen, erstellen Sie einen Namespace mit einem Namen, der in Azure eindeutig ist. Ein Namespace bietet einen Bereichscontainer für Service Bus-Ressourcen, z. B. Warteschlangen und Themen, in Ihrer Anwendung.

So erstellen Sie einen Namespace

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie das Flyoutmenü von oben links aus, und navigieren Sie zur Seite "Alle Dienste".

  3. Wählen Sie auf der linken Navigationsleiste "Integration" aus.

  4. Scrollen Sie nach unten zu Messaging services>Service Bus , und wählen Sie "Erstellen" aus.

    Screenshot der Auswahl von

  5. Führen Sie auf der Registerkarte " Grundlagen " der Seite " Namespace erstellen " die folgenden Schritte aus:

    1. Wählen Sie unter Abonnement ein Azure-Abonnement aus, in dem der Namespace erstellt werden soll.

    2. Wählen Sie für Ressourcengruppe eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine neue.

    3. Geben Sie einen Namespacenamen ein, der die folgenden Benennungskonventionen erfüllt:

      • Der Name muss innerhalb von Azure eindeutig sein. Das System überprüft sofort, ob dieser Name verfügbar ist.
      • Die Länge des Namens beträgt mindestens 6 und maximal 50 Zeichen.
      • Der Name darf nur Buchstaben, Zahlen, Bindestriche (-) enthalten.
      • Der Name muss mit einem Buchstaben beginnen und mit einem Buchstaben oder einer Ziffer enden.
      • Der Name darf nicht mit -sb oder -mgmt enden.
    4. Wählen Sie für Standort die Region aus, in der der Namespace gehostet werden soll.

    5. Wählen Sie unter Tarif den Tarif (Basic, Standard oder Premium) für den Namespace aus. Wählen Sie für diesen Schnellstart die Option Standard aus.

      Wenn Sie premium-Ebene auswählen, können Sie die Georeplikation für den Namespace aktivieren. Die Georeplikationsfunktion stellt sicher, dass die Metadaten und Daten eines Namespace kontinuierlich aus einer primären Region in eine oder mehrere sekundäre Regionen repliziert werden.

      Wichtig

      Wenn Sie Themen und Abonnements nutzen möchten, wählen Sie entweder Standard oder Premium aus. Themen und Abonnements werden im Preisniveau "Basic" nicht unterstützt.

      Wenn Sie den Tarif Premium auswählen, geben Sie die Anzahl von Messagingeinheiten an. Der Premium-Tarif bietet Ressourcenisolierung auf CPU- und Arbeitsspeicherebene, sodass die einzelnen Workloads voneinander isoliert ausgeführt werden. Dieser Ressourcencontainer wird als Messaging-Einheit bezeichnet. Ein Premium-Namespace verfügt über mindestens eine Messagingeinheit. Sie können 1, 2, 4, 8 oder 16 Messagingeinheiten für jeden Service Bus Premium-Namespace auswählen. Weitere Informationen finden Sie unter Service Bus Premium Messaging-Stufe.

    6. Wählen Sie am unteren Rand der Seite die Option Bewerten + erstellen aus.

      Screenshot der Seite

    7. Überprüfen Sie die Einstellungen auf der Seite Überprüfen und erstellen, und wählen Sie Erstellen aus.

  6. Nachdem die Bereitstellung der Ressource erfolgreich war, wählen Sie auf der Bereitstellungsseite "Zur Ressource wechseln " aus.

    Screenshot der Seite

  7. Die Startseite für Ihren Service Bus-Namespace wird angezeigt.

    Screenshot der Startseite des erstellten ServiceBus-Namespaces.

Erstellen einer Warteschlange im Azure-Portal

  1. Erweitern Sie auf der Seite Service Bus-Namespace im linken Navigationsmenü die Option Entitäten, und wählen Sie die Option Warteschlangen aus.

  2. Wählen Sie auf der Seite Warteschlangen auf der Symbolleiste + Warteschlange aus.

  3. Geben Sie einen Namen für die Warteschlange ein. Behalten Sie die anderen Werte mit ihren Standardwerten bei.

  4. Wählen Sie "Erstellen" aus.

    Screenshot der Seite „Warteschlange erstellen“

Authentifizieren der App bei Azure

In diesem Artikel werden zwei Möglichkeiten zum Herstellen einer Verbindung mit Azure Service Bus erläutert: kennwortlose und Verbindungszeichenfolge.

Die erste Option zeigt, wie Sie über Ihren Sicherheitsprinzipal in Microsoft Entra ID und die rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) eine Verbindung mit einem Service Bus-Namespace herstellen. Sie müssen sich keine Sorgen machen, dass Sie eine hartcodierte Verbindungszeichenfolge in Ihrem Code, in einer Konfigurationsdatei oder in einem sicheren Speicher wie Azure Key Vault haben.

Die zweite Option zeigt, wie Sie mithilfe einer Verbindungszeichenfolge eine Verbindung mit einem Service Bus-Namespace herstellen. 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. Weitere Informationen zur kennwortlosen Authentifizierung finden Sie unter Authentifizieren von .NET-Apps.

Zuweisen von Rollen zu Ihrem Microsoft Entra-Benutzer

Wenn Sie lokal entwickeln, stellen Sie sicher, dass das Benutzerkonto, das eine Verbindung mit Azure Service Bus herstellt, über die richtigen Berechtigungen verfügt. Sie benötigen die Rolle des Azure Service Bus-Datenbesitzers , 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 zu den verfügbaren Bereichen für Rollenzuweisungen finden Sie unter "Grundlegendes zum Bereich für Azure RBAC".

Im folgenden Beispiel wird Ihrem Benutzerkonto die Rolle Azure Service Bus Data Owner zugewiesen. Diese Rolle bietet Vollzugriff auf Azure Service Bus-Ressourcen. Befolgen Sie in einem realen Szenario das Prinzip der geringsten Berechtigung , um Benutzern nur die Mindestberechtigungen zu erteilen, die für eine sicherere Produktionsumgebung erforderlich sind.

Integrierte Azure-Rollen für Azure Service Bus

Bei Azure Service Bus 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 stellt die folgenden in Azure integrierten Rollen zum Autorisieren des Zugriffs auf einen Service Bus-Namespace bereit:

  • Azure Service Bus Data Owner: Ermöglicht den Datenzugriff auf den Service Bus-Namespace und seine Entitäten, einschließlich Warteschlangen, Themen, Abonnements und Filtern. Ein Mitglied dieser Rolle kann Nachrichten an Warteschlangen oder Themen/Abonnements senden bzw. aus diesen empfangen.
  • Azure Service Bus Data Sender: Verwenden Sie diese Rolle, um den Zugriff auf den send Service Bus-Namespace und seine Entitäten zu gewähren.
  • Azure Service Bus Data Receiver: Verwenden Sie diese Rolle, um den Zugriff auf den receive Service Bus-Namespace und seine Entitäten zu gewähren.

Informationen zum Erstellen einer benutzerdefinierten Rolle finden Sie unter Erforderliche Rechte für Service Bus-Vorgänge.

Hinzufügen eines Microsoft Entra-Benutzers zur Azure Service Bus-Besitzerrolle

Fügen Sie auf Service Bus-Namespace-Ebene Ihren Microsoft Entra-Benutzernamen der Rolle Azure Service Bus-Datenbesitzer hinzu. Diese Konfiguration ermöglicht es einer App, die im Kontext Ihres Benutzerkontos ausgeführt wird, Nachrichten an eine Warteschlange oder ein Thema zu senden. Sie kann Nachrichten aus einer Warteschlange oder einem Abonnement eines Themas empfangen.

Wichtig

In der Regel dauert die Verteilung der Rollenzuweisung in Azure ein bis zwei Minuten. In seltenen Fällen kann es aber 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. Wenn die Seite „Service Bus-Namespace“ im Azure-Portal nicht geöffnet ist, ermitteln Sie Ihren Service Bus-Namespace über die Hauptsuchleiste oder den linken Navigationsbereich.

  2. Wählen Sie auf der Seite "Übersicht " im linken Menü die Option Access Control (IAM) aus.

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

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

    Ein Screenshot 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 Service Bus Data Owner, und wählen Sie das entsprechende Ergebnis aus. Klicken Sie dann auf Weiter.

  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 (normalerweise Ihre E-Mail-Adresse benutzer@domäne), und wählen Sie unten im Dialogfeld Auswählen aus.

  8. Wählen Sie Überprüfen und zuweisen aus, um zur letzten Seite zu gelangen, und wählen Sie erneut Überprüfen und zuweisen aus, um den Vorgang abzuschließen.

Verwenden des Node-Paket-Managers (NPM) zum Installieren des Pakets

  1. Um die erforderlichen npm-Pakete für den Service Bus zu installieren, öffnen Sie ein Eingabeaufforderungsfenster, das npm in seinem Pfad enthält, und wechseln Sie zu dem Verzeichnis, in dem Sie Ihre Beispiele speichern möchten.

  2. Installieren Sie die folgenden Pakete:

    npm install @azure/service-bus @azure/identity
    

Senden von Nachrichten an eine Warteschlange

Im folgenden Beispielcode wird das Senden einer Nachricht an eine Warteschlange veranschaulicht.

Melden Sie sich mit dem Azure CLI-Befehl az login für Ihren lokalen Computer an, um die kennwortlose Authentifizierung bereitzustellen, die in diesem Code erforderlich ist.

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

  2. Erstellen Sie eine Datei namens send.js, und fügen Sie den folgenden Code in die Datei ein. Mit diesem Code werden die Namen von Wissenschaftlern als Nachricht an Ihre Warteschlange gesendet.

    Wichtig

    Das kennwortlose Anmeldeverfahren wird mithilfe der DefaultAzureCredential bereitgestellt.

    const { ServiceBusClient } = require("@azure/service-bus");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace
    const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net";
    
    // Passwordless credential
    const credential = new DefaultAzureCredential();
    
    // name of the queue
    const queueName = "<QUEUE NAME>"
    
    const messages = [
        { body: "Albert Einstein" },
        { body: "Werner Heisenberg" },
        { body: "Marie Curie" },
        { body: "Steven Hawking" },
        { body: "Isaac Newton" },
        { body: "Niels Bohr" },
        { body: "Michael Faraday" },
        { body: "Galileo Galilei" },
        { body: "Johannes Kepler" },
        { body: "Nikolaus Kopernikus" }
        ];
    
    async function main() {
        // create a Service Bus client using the passwordless authentication to the Service Bus namespace
        const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
    
        // createSender() can also be used to create a sender for a topic.
        const sender = sbClient.createSender(queueName);
    
        try {
            // Tries to send all messages in a single batch.
            // Will fail if the messages cannot fit in a batch.
            // await sender.sendMessages(messages);
    
            // create a batch object
            let batch = await sender.createMessageBatch();
            for (let i = 0; i < messages.length; i++) {
                // for each message in the array
    
                // try to add the message to the batch
                if (!batch.tryAddMessage(messages[i])) {
                    // if it fails to add the message to the current batch
                    // send the current batch as it is full
                    await sender.sendMessages(batch);
    
                    // then, create a new batch
                    batch = await sender.createMessageBatch();
    
                    // now, add the message failed to be added to the previous batch to this batch
                    if (!batch.tryAddMessage(messages[i])) {
                        // if it still can't be added to the batch, the message is probably too big to fit in a batch
                        throw new Error("Message too big to fit in a batch");
                    }
                }
            }
    
            // Send the last created batch of messages to the queue
            await sender.sendMessages(batch);
    
            console.log(`Sent a batch of messages to the queue: ${queueName}`);
    
            // Close the sender
            await sender.close();
        } finally {
            await sbClient.close();
        }
    }
    
    // call the main function
    main().catch((err) => {
        console.log("Error occurred: ", err);
        process.exit(1);
        });
    
  3. Ersetzen Sie <SERVICE-BUS-NAMESPACE> durch Ihren Service Bus-Namespace.

  4. Ersetzen Sie <QUEUE NAME> durch den Namen der Warteschlange.

  5. Um den Code in dieser Datei auszuführen, verwenden Sie diesen Befehl an einer Eingabeaufforderung:

    node send.js
    

    Die folgende Ausgabe wird angezeigt.

    Sent a batch of messages to the queue: myqueue
    

Empfangen von Nachrichten aus einer Warteschlange

Melden Sie sich mit dem Azure CLI-Befehl az login für Ihren lokalen Computer an, um die kennwortlose Authentifizierung bereitzustellen, die in diesem Code erforderlich ist.

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

  2. Erstellen Sie eine Datei namens receive.js, und fügen Sie den folgenden Code in die Datei ein.

    const { delay, ServiceBusClient, ServiceBusMessage } = require("@azure/service-bus");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace
    const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net";
    
    // Passwordless credential
    const credential = new DefaultAzureCredential();
    
    // name of the queue
    const queueName = "<QUEUE NAME>"
    
     async function main() {
        // create a Service Bus client using the passwordless authentication to the Service Bus namespace
        const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
    
        // createReceiver() can also be used to create a receiver for a subscription.
        const receiver = sbClient.createReceiver(queueName);
    
        // function to handle messages
        const myMessageHandler = async (messageReceived) => {
            console.log(`Received message: ${messageReceived.body}`);
        };
    
        // function to handle any errors
        const myErrorHandler = async (error) => {
            console.log(error);
        };
    
        // subscribe and specify the message and error handlers
        receiver.subscribe({
            processMessage: myMessageHandler,
            processError: myErrorHandler
        });
    
        // Waiting long enough before closing the sender to send messages
        await delay(20000);
    
        await receiver.close();
        await sbClient.close();
    }
    // call the main function
    main().catch((err) => {
        console.log("Error occurred: ", err);
        process.exit(1);
     });
    
  3. Ersetzen Sie <SERVICE-BUS-NAMESPACE> durch Ihren Service Bus-Namespace.

  4. Ersetzen Sie <QUEUE NAME> durch den Namen der Warteschlange.

  5. Um den Code in dieser Datei auszuführen, verwenden Sie diesen Befehl an einer Eingabeaufforderung:

    node receive.js
    

Die folgende Ausgabe wird angezeigt.

Received message: Albert Einstein
Received message: Werner Heisenberg
Received message: Marie Curie
Received message: Steven Hawking
Received message: Isaac Newton
Received message: Niels Bohr
Received message: Michael Faraday
Received message: Galileo Galilei
Received message: Johannes Kepler
Received message: Nikolaus Kopernikus

Im Azure-Portal wird auf der Seite Übersicht für den Service Bus-Namespace die Anzahl eingehender und ausgehender Nachrichten angezeigt. Möglicherweise müssen Sie eine Minute warten und dann die Seite aktualisieren, um die neuesten Werte anzuzeigen.

Der Screenshot zeigt die Anzahl von iIncoming- und ausgehenden Nachrichten.

Wählen Sie auf der Seite Übersicht die Warteschlange aus, um zur Seite Service Bus-Warteschlange zu navigieren. Auf dieser Seite wird auch die Anzahl eingehender und ausgehender Nachrichten angezeigt. Darüber hinaus werden noch weitere Informationen wie etwa die aktuelle Größe der Warteschlange, die maximale Größe und die Anzahl aktiver Nachrichten angezeigt.

Screenshot: Detailinformationen der Warteschlange.

Problembehandlung

Wenn Sie einen der folgenden Fehler erhalten, wenn Sie die kennwortlose Version des JavaScript-Codes ausführen, melden Sie sich mit dem Azure CLI-Befehl an. az login Die entsprechende Rolle wird auf Ihr Azure-Benutzerkonto angewendet:

  • „Senden“-Ansprüche sind erforderlich, um diesen Vorgang auszuführen.
  • „Empfangen“-Ansprüche sind erforderlich, um diesen Vorgang auszuführen.

Bereinigen von Ressourcen

Navigieren Sie im Azure-Portal zu Ihrem Service Bus-Namespace, und wählen Sie Löschen im Azure-Portal aus, um den Namespace und die darin enthaltene Warteschlange zu löschen.

Weitere Informationen finden Sie in der folgenden Dokumentation bzw. unter den folgenden Beispielen: