Share via


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

In deze zelfstudie voert u de volgende stappen uit:

  1. Een Service Bus-naamruimte maken met de Azure-portal.
  2. Een Service Bus-wachtrij maken met de Azure-portal.
  3. Schrijf een JavaScript-toepassing om het @azure-/servicebus-pakket te gebruiken om het volgende te doen:
    1. Een set berichten naar de wachtrij verzenden.
    2. Deze berichten ontvangen uit de wachtrij.

Notitie

Deze quickstart bevat stapsgewijze instructies voor een eenvoudig scenario voor het verzenden van berichten naar een Service Bus-wachtrij en het ontvangen ervan. U vindt vooraf gebouwde JavaScript- en TypeScript-voorbeelden voor Azure Service Bus in de Azure SDK voor JavaScript-opslagplaats op GitHub.

Vereisten

Als u geen toegang hebt tot de service, raadpleegt u het Service Bus-overzicht voordat u deze quickstart uitvoert.

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 gegevensrol aan uw resource toevoegt.
  • Voer de code uit in dezelfde terminal of opdrachtprompt.
  • Noteer de naam van uw wachtrij 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 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 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:

  1. Meld u aan bij het Azure-portaal.

  2. Navigeer naar de pagina Alle services.

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

    Afbeelding van de selectie van Een resource maken, integratie en vervolgens Service Bus in het menu.

  4. Voer in de tag Basisinformatie 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 waarin de naamruimte moet worden opgenomen of maak een nieuwe resourcegroep.

    3. 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'.
    4. Kies voor Locatie de regio waarin uw naamruimte moet worden gehost.

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

    6. Selecteer Controleren en maken onderaan de pagina.

      Afbeelding van de pagina Een naamruimte maken

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

  5. Zodra de implementatie van de resource is geslaagd, selecteert u Ga naar de resource op de implementatiepagina.

    Afbeelding van de pagina geslaagde implementatie met de koppeling Ga naar resource.

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

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

Een wachtrij maken in de Microsoft Azure-portal

  1. Selecteer op de pagina Service Bus-naamruimte de optie Wachtrijen in het linkernavigatiemenu.

  2. Selecteer op de pagina Wachtrijen de optie + Wachtrij op de werkbalk.

  3. Voer een naam voor de wachtrij in en hanteer voor de andere waarden de standaardinstellingen.

  4. Selecteer nu Maken.

    Afbeelding van het maken van een wachtrij in de portal

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.

  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 overzichtspagina toegangsbeheer (IAM) in het linkermenu.

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

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

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

  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.

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.

  1. Open uw favoriete editor, bijvoorbeeld Visual Studio Code.

  2. Maak een bestand met de naam send.js en plak de onderstaande code hierin. Met deze code worden de namen van wetenschappers als berichten naar uw wachtrij 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();
    
    // 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. Voer vervolgens de opdracht in een opdrachtprompt uit om dit bestand uit te voeren.

    node send.js
    
  6. De volgende uitvoer wordt weergegeven.

    Sent a batch of messages to the queue: myqueue
    

Berichten van een wachtrij 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.

  1. Open uw favoriete editor, bijvoorbeeld 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. Voer vervolgens de opdracht in een opdrachtprompt uit om dit bestand uit te voeren.

    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 ongeveer een minuut wachten en de pagina vervolgens vernieuwen om de meest recente waarden te zien.

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

Details van wachtrij

Probleemoplossing

Als u een van de volgende fouten ontvangt bij het uitvoeren van de versie zonder wachtwoord van de JavaScript-code, controleert u of u bent aangemeld via de Azure CLI-opdracht az login en wordt de juiste rol toegepast op uw Azure-gebruikersaccount:

  • 'Verzenden' claim(en) zijn vereist om deze bewerking uit te voeren
  • 'Ontvangst' claim(en) 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.

Volgende stappen

Raadpleeg de volgende documentatie en voorbeelden: