Delen via


Quickstart: Berichten verzenden naar en ontvangen van Azure Service Bus-wachtrijen (JavaScript)

Deze quickstart bevat stapsgewijze instructies voor een eenvoudig scenario voor het verzenden van berichten naar een Service Bus-wachtrij en het ontvangen ervan. In deze quickstart voert u de volgende taken uit:

  • Een Service Bus-naamruimte maken met de Azure-portal.

  • Een Service Bus-wachtrij maken met de Azure-portal.

  • Schrijf een JavaScript-toepassing om het @azure-/servicebus-pakket te gebruiken voor het volgende:

    • Een set berichten naar de wachtrij verzenden.
    • Deze berichten ontvangen uit de wachtrij.

U vindt vooraf gemaakte JavaScript- en TypeScript-voorbeelden voor Azure Service Bus in de Azure SDK voor JavaScript-opslagplaats op GitHub.

Als u nieuw bent bij de service, raadpleegt u het Service Bus-overzicht voordat u begint.

Vereisten

Ga als volgt te werk om deze quickstart te gebruiken met uw eigen Azure-account:

  • Installeer Azure CLI, dat de verificatie zonder wachtwoord biedt voor uw ontwikkelcomputer.
  • Meld u aan met uw Azure-account bij een opdrachtprompt met az login.
  • Gebruik hetzelfde account wanneer u de juiste gegevensrol aan uw resource toevoegt.
  • Voer de code uit in hetzelfde opdrachtpromptvenster.
  • Noteer uw wachtrijnaam voor uw Service Bus-naamruimte. Je hebt dat nodig in de code.

Notitie

In deze zelfstudie wordt gebruikgemaakt van voorbeelden die u kunt kopiëren en uitvoeren met Nodejs. Zie voor instructies over het maken van een Node.js-toepassing Een Node.js-toepassing maken en implementeren op een Azure-website of Node.js-cloudservice met Windows PowerShell.

Een naamruimte in de Azure-portal maken

Als u Service Bus-berichtenentiteiten in Azure wilt gaan gebruiken, maakt u een naamruimte met een naam die uniek is in Azure. Een naamruimte biedt een bereikcontainer voor Service Bus-resources, zoals wachtrijen en onderwerpen, in uw toepassing.

Ga als volgt te werk om een naamruimte te maken:

  1. Meld u aan bij het Azure-portaal.

  2. Selecteer het flyoutmenu linksboven en navigeer naar de pagina Alle services.

  3. Selecteer Integratie in de linkernavigatiebalk.

  4. Schuif omlaag naar berichtenservices>Service Bus en selecteer Maken.

    Schermopname van het maken van een resource, integratie en vervolgens Service Bus in het menu.

  5. Voer op het tabblad Basis van de pagina Naamruimte maken de volgende stappen uit:

    1. Kies voor Abonnement een Azure-abonnement waarin u de naamruimte maakt.

    2. Kies voor resourcegroep een bestaande resourcegroep of maak een nieuwe.

    3. Voer een naamruimtenaam in die voldoet 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.
    4. Kies voor Locatie de regio voor het hosten van uw naamruimte.

    5. Selecteer voor de prijscategorie de prijscategorie (Basic, Standard of Premium) voor de naamruimte. Voor deze quickstart selecteert u Standard.

      Als u de Premium-laag selecteert, kunt u geo-replicatie inschakelen voor de naamruimte. De functie voor geo-replicatie zorgt ervoor dat de metagegevens en gegevens van een naamruimte continu worden gerepliceerd van een primaire regio naar een of meer secundaire regio's.

      Belangrijk

      Kies Standard of Premium indien u gebruik wilt maken van onderwerpen en abonnementen. Onderwerpen en 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 de Service Bus Premium Messaging-laag voor meer informatie.

    6. Selecteer Controleren en maken onderaan de pagina.

      Schermopname van de pagina Een naamruimte maken

    7. Controleer de instellingen op de pagina Beoordelen en maken en selecteer Maken.

  6. Nadat de implementatie van de resource is geslaagd, selecteert u Ga naar de resource op de implementatiepagina.

    Schermopname van de pagina waar de implementatie is geslaagd, met de koppeling Ga naar bron.

  7. U ziet de startpagina voor uw Service Bus-naamruimte.

    Schermopname van de startpagina van de Service Bus-naamruimte die is gemaakt.

Een wachtrij maken in de Microsoft Azure-portal

  1. Vouw op de pagina Service Bus-naamruimte entiteiten uit in het navigatiemenu aan de linkerkant en selecteer Wachtrijen.

  2. Op de Wachtrijen pagina, selecteer + Wachtrij op de werkbalk.

  3. Voer een naam in voor de wachtrij. Laat de andere waarden ongewijzigd met de standaardwaarden.

  4. Klik op Creëren.

    Schermopname van de pagina Wachtrij maken.

De app verifiëren bij Azure

In dit artikel 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 een in code vastgelegde verbindingsreeks in uw code, 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 Service Bus-verificatie en -autorisatie voor meer informatie. Zie .NET-apps verifiëren voor meer informatie over verificatie zonder wachtwoord.

Rollen toewijzen aan uw Microsoft Entra-gebruiker

Wanneer u lokaal ontwikkelt, moet u ervoor zorgen dat het gebruikersaccount dat verbinding maakt met Azure Service Bus de juiste machtigingen heeft. 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. Zie Bereik voor Azure RBAC begrijpen voor meer informatie over de beschikbare bereiken voor roltoewijzingen.

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 volgende 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 in, waaronder wachtrijen, onderwerpen, abonnementen en filters. Een lid van deze rol kan berichten verzenden en ontvangen van wachtrijen of onderwerpen/abonnementen.
  • Azure Service Bus-gegevenszender: gebruik deze rol om de toegang te verlenen tot de Service Bus-naamruimte en de send bijbehorende entiteiten.
  • Azure Service Bus-gegevensontvanger: gebruik deze rol om de toegang te verlenen tot de Service Bus-naamruimte en de receive 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. Met deze configuratie kan een app die wordt uitgevoerd in de context van uw gebruikersaccount berichten verzenden naar een wachtrij of een onderwerp. Het kan berichten ontvangen van een wachtrij of een abonnement op een onderwerp.

Belangrijk

In de meeste gevallen duurt het een paar minuten voordat de roltoewijzing in Azure is doorgegeven. 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.

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

  2. Selecteer op de pagina Overzichttoegangsbeheer (IAM) in het menu aan de linkerkant.

  3. Selecteer op de pagina Toegangsbeheer (IAM) het tabblad Roltoewijzingen .

  4. Selecteer + Toevoegen in het bovenste menu en voeg vervolgens roltoewijzing toe.

    Een schermopname die laat zien hoe u een rol toewijst.

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

  6. Selecteer onder Toegang toewijzen de optie Gebruiker, groep of service-principal en kies vervolgens + Leden selecteren.

  7. Zoek in het dialoogvenster naar uw Microsoft Entra-gebruikersnaam (meestal uw user@domain e-mailadres) en kies Vervolgens onderaan het dialoogvenster Selecteren .

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

  1. Als u de vereiste npm-pakketten voor Service Bus wilt installeren, opent u een opdrachtpromptvenster dat npm in zijn pad heeft en verandert u de directory naar de map waar u uw voorbeelden wilt opslaan.

  2. Installeer de volgende pakketten:

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

Berichten verzenden naar een wachtrij

De volgende voorbeeldcode laat zien hoe u een bericht naar een wachtrij verzendt.

Meld u aan met de Azure CLI-opdracht az login voor uw lokale computer om de verificatie zonder wachtwoord op te geven die in deze code is vereist.

  1. Open een teksteditor, zoals Visual Studio Code.

  2. Maak een bestand met de naam send.js en plak hierin de volgende code. Met deze code worden de namen van wetenschappers als berichten naar uw wachtrij verzonden.

    Belangrijk

    De referentie zonder wachtwoord wordt opgegeven met behulp van 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();
    
    // 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. Vervang <SERVICE-BUS-NAMESPACE> door uw Service Bus-naamruimte.

  4. Vervang <QUEUE NAME> door de naam van het wachtrij.

  5. Als u de code in dit bestand wilt uitvoeren, gebruikt u deze opdracht bij een opdrachtprompt:

    node send.js
    

    De volgende uitvoer wordt weergegeven.

    Sent a batch of messages to the queue: myqueue
    

Berichten van een wachtrij ontvangen

Meld u aan met de Azure CLI-opdracht az login voor uw lokale computer om de verificatie zonder wachtwoord op te geven die in deze code is vereist.

  1. Open een teksteditor, zoals Visual Studio Code.

  2. Maak een bestand met de naam receive.js en plak hierin de volgende code.

    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. Vervang <SERVICE-BUS-NAMESPACE> door uw Service Bus-naamruimte.

  4. Vervang <QUEUE NAME> door de naam van het wachtrij.

  5. Als u de code in dit bestand wilt uitvoeren, gebruikt u deze opdracht bij een opdrachtprompt:

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

Op de pagina Overzicht voor de Service Bus-naamruimte in Azure Portal ziet u het aantal inkomende en uitgaande berichten. Mogelijk moet u een minuut of zo wachten en vervolgens de pagina vernieuwen om de meest recente waarden te zien.

Schermopname van het aantal binnenkomende en uitgaande berichten.

Selecteer de wachtrij op de pagina Overzicht om naar de pagina Service Bus-wachtrij te gaan. U ziet ook de inkomende en uitgaande berichten op deze pagina. U ziet ook andere informatie, zoals de huidige grootte van de wachtrij, maximum grootte, aantal actieve berichten, enzovoort.

Schermopname met informatie over wachtrijdetails.

Probleemoplossing

Als u een van de volgende fouten ontvangt wanneer u de versie zonder wachtwoord van de JavaScript-code uitvoert, meldt u zich aan met behulp van de Azure CLI-opdracht. az login De juiste rol wordt toegepast op uw Azure-gebruikersaccount:

  • 'Verzenden' rechten zijn vereist om deze bewerking uit te voeren
  • 'Ontvangst' rechten zijn vereist om deze bewerking uit te voeren

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.

Raadpleeg de volgende documentatie en voorbeelden: