Senden und Empfangen von Nachrichten für Azure Service Bus-Warteschlangen (JavaScript)
In diesem Tutorial führen Sie folgende Schritte 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 Paket @azure/service-bus für Folgendes zu verwenden:
- Senden einer Reihe von Nachrichten an die Warteschlange
- Empfangen von Nachrichten aus der Warteschlange
Hinweis
In dieser Schnellstartanleitung wird Schritt für Schritt ein einfaches Szenario erläutert, bei dem Sie Nachrichten an eine Service Bus-Warteschlange senden und diese Nachrichten empfangen. Weitere vordefinierte JavaScript-und TypeScript-Beispiele für Azure Service Bus finden Sie auf GitHub im Azure SDK für das JavaScript-Repository.
Voraussetzungen
Wenn Sie mit dem Dienst noch keine Erfahrung haben, informieren Sie sich über den Abschnitt Was ist Azure Service Bus?, bevor Sie die Schritte in dieser Schnellstartanleitung durchführen.
- Ein Azure-Abonnement. Um dieses Tutorial abzuschließen, benötigen Sie ein Azure-Konto. Sie können Ihre MSDN-Abonnentenvorteile aktivieren oder sich für ein kostenloses Konto registrieren.
- Node.js LTS
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 beim Terminal oder an der 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 Terminal oder an der gleichen Eingabeaufforderung aus.
- Notieren Sie sich den Namen Ihrer Warteschlange für Ihren Service Bus-Namespace. Dieser wird im Code benötigt.
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 beginnen zu können, müssen Sie zuerst einen Namespace mit einem in Azure eindeutigen Namen erstellen. Ein Namespace ist ein Bereichscontainer für Service Bus-Ressourcen (Warteschlangen, Themen usw.) innerhalb Ihrer Anwendung.
So erstellen Sie einen Namespace
Melden Sie sich beim Azure-Portal an.
Navigieren Sie zur Seite Alle Dienste.
Wählen Sie im linken Navigationsbereich in der Kategorienliste Integration aus, zeigen Sie mit dem Mauszeiger auf Service Bus, und wählen Sie auf der Service Bus-Kachel die Schaltfläche + aus.
Führen Sie auf der Seite Namespace erstellen auf der Registerkarte Grundlagen die folgenden Schritte aus:
Wählen Sie unter Abonnement ein Azure-Abonnement aus, in dem der Namespace erstellt werden soll.
Wählen Sie für Ressourcengruppe eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine neue.
Geben Sie einen Namen für den Namespace ein. Der Namespacename sollte den folgenden Namenskonventionen entsprechen:
- 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 endet nicht mit
-sb
oder-mgmt
.
Wählen Sie unter Standort die Region aus, in der Ihr Namespace gehostet werden soll.
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 den Premium-Tarif auswählen, wählen Sie aus, ob Sie Georeplikation für den Namespace aktivieren können. Das Georeplikationsfeature stellt sicher, dass die Metadaten und Daten eines Namespaces 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/Abonnements werden für den Basic-Tarif 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 Messagingeinheit 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- und Standard-Preisstufe für Messaging.
Wählen Sie am unteren Rand der Seite die Option Bewerten + erstellen aus.
Überprüfen Sie die Einstellungen auf der Seite Überprüfen und erstellen, und wählen Sie Erstellen aus.
Wählen Sie nach der erfolgreichen Bereitstellung der Ressource auf der Bereitstellungsseite Zur Ressource wechseln aus.
Die Startseite für Ihren Service Bus-Namespace wird angezeigt.
Erstellen einer Warteschlange im Azure-Portal
Erweitern Sie auf der Seite Service Bus-Namespace die Option Entitäten im Navigationsmenü nach links, und wählen Sie die Option Warteschlangen aus.
Wählen Sie auf der Seite Warteschlangen auf der Symbolleiste die Option + Warteschlange aus.
Geben Sie einen Namen für die Warteschlange ein, und lassen Sie die anderen Werte unverändert.
Wählen Sie jetzt Erstellen.
Authentifizieren der App bei Azure
In dieser Schnellstartanleitung werden zwei Möglichkeiten zum Herstellen einer Verbindung mit Azure Service Bus gezeigt: kennwortlos 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 Gedanken darüber machen, dass hartcodierte Verbindungszeichenfolgen in Ihrem Code oder in einer Konfigurationsdatei oder in einem sicheren Speicher wie Azure Key Vault vorhanden sind.
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 der Verbindungszeichenfolge möglicherweise einfacher. In realen Anwendungen und Produktionsumgebungen wird die kennwortlose Option empfohlen. Weitere Informationen finden Sie unter Authentifizierung und Autorisierung. Weitere Informationen zur kennwortlosen Authentifizierung finden Sie auch auf der Übersichtsseite.
Zuweisen von Rollen zu Ihrem Microsoft Entra-Benutzer
Achten Sie bei der lokalen Entwicklung darauf, dass das Benutzerkonto, das die Verbindung mit Azure Service Bus herstellt, über die korrekten Berechtigungen verfügt. Zum Senden und Empfangen von Nachrichten ist die Rolle Azure Service Bus-Datenbesitzer erforderlich. Um sich selbst diese Rolle zuweisen zu können, benötigen Sie die Rolle „Benutzerzugriffsadministrator“ oder eine andere Rolle, die die Aktion Microsoft.Authorization/roleAssignments/write
umfasst. 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 auf der Seite Grundlegendes zum Bereich von 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. 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.
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 integrierten Azure-Rollen zum Autorisieren des Zugriffs auf einen Service Bus-Namespace bereit:
- Azure Service Bus-Datenbesitzer: ermöglicht den Datenzugriff auf einen Service Bus-Namespace und seine Entitäten (Warteschlangen, Themen, Abonnements und Filter). Ein Mitglied dieser Rolle kann Nachrichten an Warteschlangen oder Themen/Abonnements senden bzw. aus diesen empfangen.
- Azure Service Bus-Datensender: Verwenden Sie diese Rolle, um dem Service Bus-Namespace und seinen Entitäten Sendezugriff zu erteilen.
- Azure Service Bus-Datenempfänger: Verwenden Sie diese Rolle, um Zugriff auf den Service Bus-Namespace und seine Entitäten zu erhalten.
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. Dies ermöglicht einer App, die im Kontext Ihres Benutzerkontos ausgeführt wird, Nachrichten an eine Warteschlange oder ein Thema zu senden und Nachrichten aus einer Warteschlange oder einem Abonnement eines Themas zu empfangen.
Wichtig
In der Regel dauert die Verteilung der Rollenzuweisung in Azure ein bis zwei Minuten. In seltenen Fällen kann sie 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.
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.
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 und aus dem dann angezeigten Dropdownmenü die Option 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 Service Bus Data Owner
, und wählen Sie das entsprechende Ergebnis aus. Klicken Sie dann auf Weiter.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 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
Öffnen Sie eine Eingabeaufforderung, die
npm
im Pfad enthält, ändern Sie das Verzeichnis in den Ordner, in dem die Beispiele gespeichert werden sollen, und führen Sie dann den folgenden Befehl aus, um die erforderlichen npm-Pakete für Service Bus zu installieren.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.
Sie müssen sich mithilfe von az login
über die Azure CLI angemeldet haben, damit Ihr lokaler Computer die kennwortlose Authentifizierung bereitstellen kann, die in diesem Code erforderlich ist.
Öffnen Sie Ihren bevorzugten Editor, z. B. Visual Studio Code.
Erstellen Sie eine Datei namens
send.js
, und fügen Sie den folgenden Code ein. Mit diesem Code werden die Namen von Wissenschaftlern als Nachricht an Ihre Warteschlange gesendet.Wichtig
Die kennwortlosen Anmeldeinformationen werden mit 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); });
Ersetzen Sie
<SERVICE-BUS-NAMESPACE>
durch Ihren Service Bus-Namespace.Ersetzen Sie
<QUEUE NAME>
durch den Namen der Warteschlange.Führen Sie den Befehl anschließend an einer Eingabeaufforderung aus, um diese Datei auszuführen.
node send.js
Die folgende Ausgabe wird angezeigt.
Sent a batch of messages to the queue: myqueue
Empfangen von Nachrichten aus einer Warteschlange
Sie müssen sich mithilfe von az login
über die Azure CLI angemeldet haben, damit Ihr lokaler Computer die kennwortlose Authentifizierung bereitstellen kann, die in diesem Code erforderlich ist.
Öffnen Sie Ihren bevorzugten Editor, z. B. Visual Studio Code.
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); });
Ersetzen Sie
<SERVICE-BUS-NAMESPACE>
durch Ihren Service Bus-Namespace.Ersetzen Sie
<QUEUE NAME>
durch den Namen der Warteschlange.Führen Sie den Befehl anschließend an einer Eingabeaufforderung aus, um diese Datei auszuführen.
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. Unter Umständen müssen Sie ca. eine Minute warten und die Seite dann aktualisieren, damit die neuesten Werte angezeigt werden.
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.
Problembehandlung
Wenn beim Ausführen der kennwortlosen Version des JavaScript-Codes einer der folgenden Fehler auftritt, stellen Sie mithilfe des Azure CLI-Befehls az login
sicher, dass Sie angemeldet sind und dass die entsprechende Rolle auf Ihr Azure-Benutzerkonto angewendet wird:
- Zum Ausführen dieses Vorgangs sind Ansprüche vom Typ „Senden“ erforderlich.
- Zum Ausführen dieses Vorgangs sind Ansprüche vom Typ „Empfangen“ erforderlich.
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.
Nächste Schritte
Weitere Informationen finden Sie in der folgenden Dokumentation bzw. unter den folgenden Beispielen: