Berichten verzenden naar een Azure Service Bus-onderwerp en berichten ontvangen van abonnementen op het onderwerp (JavaScript)
In deze zelfstudie voert u de volgende stappen uit:
- Een Service Bus-naamruimte maken met de Azure-portal.
- Een Service Bus-onderwerp maken met de Azure-portal.
- Een Service Bus-abonnement maken met de Azure-portal.
- Schrijf een JavaScript-toepassing om het @azure-/servicebus-pakket te gebruiken om het volgende te doen:
- Een set berichten naar het onderwerp verzenden.
- Deze berichten ontvangen van het abonnement.
Notitie
Deze quickstart bevat stapsgewijze instructies voor een eenvoudig scenario voor het verzenden van een batch berichten naar een Service Bus-onderwerp en het ontvangen van die berichten uit een abonnement op het onderwerp. U vindt vooraf gebouwde JavaScript- en TypeScript-voorbeelden voor Azure Service Bus in de Azure SDK voor JavaScript-opslagplaats op GitHub.
Vereisten
- Een Azure-abonnement. U hebt een Azure-account nodig om deze zelfstudie te voltooien. U kunt uw voordelen als MSDN-abonnee activeren of u aanmelden voor een gratis account.
- Node.js LTS
- Volg de stappen in de quickstart: Gebruik Azure Portal om een Service Bus-onderwerp en abonnementen voor het onderwerp te maken. U gebruikt slechts één abonnement voor deze quickstart.
Als u deze quickstart wilt gebruiken met uw eigen Azure-account, hebt u het volgende nodig:
- Installeer Azure CLI, dat de verificatie zonder wachtwoord biedt voor uw ontwikkelcomputer.
- Meld u aan met uw Azure-account bij de terminal of opdrachtprompt met
az login
. - Gebruik hetzelfde account wanneer u de juiste rol aan uw resource toevoegt.
- Voer de code uit in dezelfde terminal of opdrachtprompt.
- Noteer de onderwerpnaam en het abonnement voor uw Service Bus-naamruimte. U hebt dat nodig in de code.
Notitie
- In deze zelfstudie wordt gebruikgemaakt van voorbeelden die u kunt kopiëren en uitvoeren met Nodejs. Zie Een Node.js-toepassing maken en implementeren op een Azure-website of Node.js-cloudservice met Windows PowerShell voor instructies over het maken van een Node.js-toepassing.
Een naamruimte in de Azure-portal maken
Als u Service Bus-berichtenentiteiten wilt gebruiken in Azure, moet u eerst een naamruimte maken met een naam die uniek is binnen Azure. Een naamruimte biedt een bereikcontainer voor Service Bus-resources (wachtrijen, onderwerpen, enzovoort) in uw toepassing.
Ga als volgt te werk om een naamruimte te maken:
Meld u aan bij het Azure-portaal.
Navigeer naar de pagina Alle services.
Selecteer integratie in de linkernavigatiebalk in de lijst met categorieën, beweeg de muisaanwijzer over Service Bus en selecteer + vervolgens de knop op de Service Bus-tegel.
Voer in de tag Basisinformatie van de pagina Naamruimte maken de volgende stappen uit:
Kies voor Abonnement een Azure-abonnement waarin u de naamruimte maakt.
Kies voor Resourcegroep een bestaande resourcegroep waarin de naamruimte moet worden opgenomen of maak een nieuwe resourcegroep.
Voer een naam in voor de naamruimte. De naamruimtenaam moet voldoen aan de volgende naamconventies:
- De naam moet uniek zijn in Azure. In het systeem wordt onmiddellijk gecontroleerd of de naam beschikbaar is.
- De naamlengte is ten minste 6 en maximaal 50 tekens.
- De naam mag alleen letters, cijfers, afbreekstreepjes "-" bevatten.
- De naam moet beginnen met een letter en eindigen op een letter of cijfer.
- De naam eindigt niet op '-sb' of '-mgmt'.
Kies voor Locatie de regio waarin uw naamruimte moet worden gehost.
Selecteer voor de prijscategorie de prijscategorie (Basic, Standard of Premium) voor de naamruimte. Voor deze quickstart selecteert u Standard.
Belangrijk
Kies Standard of Premium indien u gebruik wilt maken van onderwerpen en abonnementen. Onderwerpen/abonnementen worden niet ondersteund in de prijscategorie Basic.
Als u de Prijscategorie Premium hebt geselecteerd, geeft u het aantal berichteneenheden op. De Premium-prijscategorie biedt isolatie van resources op het niveau van de CPU en het geheugen, zodat elke workload geïsoleerd wordt uitgevoerd. Deze resourcecontainer wordt een Messaging-eenheid genoemd. Een Premium-naamruimte heeft ten minste één Messaging-eenheid. U kunt 1, 2, 4, 8 of 16 berichteneenheden selecteren voor elke Service Bus Premium-naamruimte. Zie Service Bus Premium Messaging voor meer informatie.
Selecteer Controleren en maken onderaan de pagina.
Controleer de instellingen op de pagina Beoordelen en maken en selecteer Maken.
Zodra de implementatie van de resource is geslaagd, selecteert u Ga naar de resource op de implementatiepagina.
U ziet de startpagina voor uw Service Bus-naamruimte.
Een onderwerp maken met de Azure-portal
Selecteer in het linkermenu op de pagina Service Bus-naamruimte de optie Onderwerpen.
Selecteer + Onderwerp op de werkbalk.
Voer een naam in voor het onderwerp. Houd voor de overige opties de standaardwaarden aan.
Selecteer Maken.
Een abonnement op het onderwerp maken
Selecteer het onderwerp dat u in de vorige sectie hebt gemaakt.
Selecteer + Abonnement op de werkbalk op de pagina Service Bus-onderwerp.
Voer op de pagina Abonnement maken de volgende stappen uit:
Voer S1 in als naam van het abonnement.
Voer 3 in voor maximaal aantal bezorgingen.
Selecteer vervolgens Maken om het abonnement te maken.
De app verifiëren bij Azure
In deze quickstart ziet u twee manieren om verbinding te maken met Azure Service Bus: zonder wachtwoord en verbindingsreeks.
De eerste optie laat zien hoe u uw beveiligingsprincipaal gebruikt in Microsoft Entra ID en op rollen gebaseerd toegangsbeheer (RBAC) om verbinding te maken met een Service Bus-naamruimte. U hoeft zich geen zorgen te maken over het in code vastgelegde verbindingsreeks in uw code of in een configuratiebestand of in een beveiligde opslag, zoals Azure Key Vault.
De tweede optie laat zien hoe u een verbindingsreeks gebruikt om verbinding te maken met een Service Bus-naamruimte. Als u nog niet eerder met Azure werkt, kunt u de verbindingsreeks optie gemakkelijker volgen. We raden u aan de optie zonder wachtwoord te gebruiken in echte toepassingen en productieomgevingen. Zie Verificatie en autorisatie voor meer informatie. U kunt ook meer lezen over verificatie zonder wachtwoord op de overzichtspagina.
Rollen toewijzen aan uw Microsoft Entra-gebruiker
Zorg er bij het lokaal ontwikkelen voor dat het gebruikersaccount dat verbinding maakt met Azure Service Bus over de juiste machtigingen beschikt. U hebt de rol Azure Service Bus-gegevenseigenaar nodig om berichten te kunnen verzenden en ontvangen. Als u uzelf deze rol wilt toewijzen, hebt u de rol Gebruikerstoegangsbeheerder of een andere rol nodig die de Microsoft.Authorization/roleAssignments/write
actie bevat. U kunt Azure RBAC-rollen toewijzen aan een gebruiker met behulp van Azure Portal, Azure CLI of Azure PowerShell. Meer informatie over de beschikbare bereiken voor roltoewijzingen op de overzichtspagina van het bereik.
In het volgende voorbeeld wordt de Azure Service Bus Data Owner
rol toegewezen aan uw gebruikersaccount, dat volledige toegang biedt tot Azure Service Bus-resources. Volg in een echt scenario het principe van minimale bevoegdheden om gebruikers alleen de minimale machtigingen te geven die nodig zijn voor een veiligere productieomgeving.
Ingebouwde Azure-rollen voor Azure Service Bus
Voor Azure Service Bus is het beheer van naamruimten en alle gerelateerde resources via Azure Portal en de Azure Resource Management-API al beveiligd met behulp van het Azure RBAC-model. Azure biedt de onderstaande ingebouwde Azure-rollen voor het autoriseren van toegang tot een Service Bus-naamruimte:
- Azure Service Bus-gegevenseigenaar: hiermee schakelt u gegevenstoegang tot de Service Bus-naamruimte en de bijbehorende entiteiten (wachtrijen, onderwerpen, abonnementen en filters) in. Een lid van deze rol kan berichten verzenden en ontvangen van wachtrijen of onderwerpen/abonnementen.
- Azure Service Bus-gegevenszender: gebruik deze rol om de verzendtoegang tot de Service Bus-naamruimte en de bijbehorende entiteiten te geven.
- Azure Service Bus-gegevensontvanger: gebruik deze rol om de ontvangsttoegang te geven tot de Service Bus-naamruimte en de bijbehorende entiteiten.
Als u een aangepaste rol wilt maken, raadpleegt u Rechten die vereist zijn voor Service Bus-bewerkingen.
Microsoft Entra-gebruiker toevoegen aan de rol Azure Service Bus-eigenaar
Voeg uw Microsoft Entra-gebruikersnaam toe aan de rol Azure Service Bus-gegevenseigenaar op het niveau van de Service Bus-naamruimte. Hiermee kan een app die wordt uitgevoerd in de context van uw gebruikersaccount berichten verzenden naar een wachtrij of een onderwerp en berichten ontvangen van een wachtrij of het abonnement van een onderwerp.
Belangrijk
In de meeste gevallen duurt het een paar minuten voordat de roltoewijzing is doorgegeven in Azure. In zeldzame gevallen kan het maximaal acht minuten duren. Als u verificatiefouten ontvangt wanneer u de code voor het eerst uitvoert, wacht u even en probeert u het opnieuw.
Als u de pagina Service Bus-naamruimte niet hebt geopend in Azure Portal, zoekt u uw Service Bus-naamruimte met behulp van de hoofdzoekbalk of linkernavigatiebalk.
Selecteer op de overzichtspagina toegangsbeheer (IAM) in het linkermenu.
Selecteer op de pagina Toegangsbeheer (IAM) het tabblad Roltoewijzingen .
Selecteer + Toevoegen in het bovenste menu en voeg vervolgens roltoewijzing toe in de resulterende vervolgkeuzelijst.
Gebruik het zoekvak om de resultaten te filteren op de gewenste rol. In dit voorbeeld zoekt
Azure Service Bus Data Owner
en selecteert u het overeenkomende resultaat. Kies vervolgens Volgende.Selecteer onder Toegang toewijzen de optie Gebruiker, groep of service-principal en kies vervolgens + Leden selecteren.
Zoek in het dialoogvenster naar uw Microsoft Entra-gebruikersnaam (meestal uw user@domain e-mailadres) en kies Vervolgens onderaan het dialoogvenster Selecteren .
Selecteer Beoordelen + toewijzen om naar de laatste pagina te gaan en vervolgens opnieuw beoordelen en toewijzen om het proces te voltooien.
Node Package Manager (NPM) gebruiken om het pakket te installeren
Als u de vereiste npm-pakketten voor Service Bus wilt installeren, opent u een opdrachtprompt die zich in het pad bevindt
npm
, wijzigt u de map in de map waarin u uw voorbeelden wilt hebben en voert u deze opdracht uit.Installeer de volgende pakketten:
npm install @azure/service-bus @azure/identity
Berichten verzenden naar een onderwerp
De volgende voorbeeldcode laat zien hoe u een batch berichten naar een Service Bus-onderwerp verzendt. Zie opmerkingen bij de code voor meer informatie.
U moet zijn aangemeld met de Azure CLI's az login
om uw lokale computer de verificatie zonder wachtwoord te laten opgeven die vereist is in deze code.
Open uw favoriete editor, bijvoorbeeld Visual Studio Code
Maak een bestand met de naam
sendtotopic.js
en plak de onderstaande code hierin. Met deze code worden een bericht naar uw onderwerp verzonden.Belangrijk
De referentie zonder wachtwoord wordt geleverd met de DefaultAzureCredential.
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(); const topicName = "<TOPIC 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 queue. const sender = sbClient.createSender(topicName); 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 topic await sender.sendMessages(batch); console.log(`Sent a batch of messages to the topic: ${topicName}`); // 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); });
Vervang
<SERVICE BUS NAMESPACE CONNECTION STRING>
door de verbindingstekenreeks voor uw Service Bus-naamruimte.Vervang
<TOPIC NAME>
door de naam van het onderwerp.Voer vervolgens de opdracht in een opdrachtprompt uit om dit bestand uit te voeren.
node sendtotopic.js
De volgende uitvoer wordt weergegeven.
Sent a batch of messages to the topic: mytopic
Berichten van een abonnement ontvangen
U moet zijn aangemeld met de Azure CLI's az login
om uw lokale computer de verificatie zonder wachtwoord te laten opgeven die vereist is in deze code.
Open uw favoriete editor, bijvoorbeeld Visual Studio Code
Maak een bestand met de naam receivefromsubscription.js, en plak hierin de volgende code. Zie opmerkingen bij de code voor meer informatie.
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(); const topicName = "<TOPIC NAME>"; const subscriptionName = "<SUBSCRIPTION 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 queue. const receiver = sbClient.createReceiver(topicName, subscriptionName); // 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(5000); await receiver.close(); await sbClient.close(); } // call the main function main().catch((err) => { console.log("Error occurred: ", err); process.exit(1); });
Vervang
<SERVICE BUS NAMESPACE CONNECTION STRING>
door de verbindingsreeks naar uw naamruimte.Vervang
<TOPIC NAME>
door de naam van het onderwerp.Vervang
<SUBSCRIPTION NAME>
door de naam van het abonnement op het onderwerp.Voer vervolgens de opdracht in een opdrachtprompt uit om dit bestand uit te voeren.
node receivefromsubscription.js
De volgende uitvoer wordt weergegeven.
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
Navigeer in Azure Portal naar uw Service Bus-naamruimte, ga naar Onderwerpen in het onderste deelvenster en selecteer uw onderwerp om de Service Bus-onderwerppagina voor uw onderwerp weer te geven. Op deze pagina ziet u 10 binnenkomende en 10 uitgaande berichten in de grafiek Berichten .
Als u de volgende keer alleen de app verzenden uitvoert, ziet u op de pagina Service Bus-onderwerp 20 binnenkomende berichten (10 nieuwe) maar 10 uitgaande berichten.
Als u op deze pagina een abonnement selecteert in het onderste deelvenster, gaat u naar de pagina Service Bus-abonnement . Op deze pagina ziet u het aantal actieve berichten, het aantal onbestelbare berichten, en meer. In dit voorbeeld zijn er 10 actieve berichten die nog niet zijn ontvangen door een ontvanger.
Probleemoplossing
Als u een foutmelding krijgt bij het uitvoeren van de versie zonder wachtwoord van de JavaScript-code over vereiste claims, controleert u of u bent aangemeld via de Azure CLI-opdracht az login
en wordt de juiste rol toegepast op uw Azure-gebruikersaccount.
Resources opschonen
Navigeer naar uw Service Bus-naamruimte in Azure Portal en selecteer Verwijderen in Azure Portal om de naamruimte en de wachtrij erin te verwijderen.
Volgende stappen
Raadpleeg de volgende documentatie en voorbeelden: