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:

  1. Een Service Bus-naamruimte maken met de Azure-portal.
  2. Een Service Bus-onderwerp maken met de Azure-portal.
  3. Een Service Bus-abonnement maken met de Azure-portal.
  4. 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

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

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.

    Image showing selection of Create a resource, Integration, and then Service Bus in the 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.

      Image showing the Create a namespace page

    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.

    Image showing the deployment succeeded page with the Go to resource link.

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

    Image showing the home page of the Service Bus namespace created.

Een onderwerp maken met de Azure-portal

  1. Selecteer in het linkermenu op de pagina Service Bus-naamruimte de optie Onderwerpen.

  2. Selecteer + Onderwerp op de werkbalk.

  3. Voer een naam in voor het onderwerp. Houd voor de overige opties de standaardwaarden aan.

  4. Selecteer Maken.

    Image showing the Create topic page.

Een abonnement op het onderwerp maken

  1. Selecteer het onderwerp dat u in de vorige sectie hebt gemaakt.

    Image showing the selection of topic from the list of topics.

  2. Selecteer + Abonnement op de werkbalk op de pagina Service Bus-onderwerp.

    Image showing the Add subscription button.

  3. Voer op de pagina Abonnement maken de volgende stappen uit:

    1. Voer S1 in als naam van het abonnement.

    2. Voer 3 in voor maximaal aantal bezorgingen.

    3. Selecteer vervolgens Maken om het abonnement te maken.

      Image showing the Create subscription page.

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 Gebruikerstoegang Beheer istrator 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.

    A screenshot showing how to assign a role.

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

  1. Open uw favoriete editor, bijvoorbeeld Visual Studio Code

  2. 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);
     });
    
  3. Vervang <SERVICE BUS NAMESPACE CONNECTION STRING> door de verbindingstekenreeks voor uw Service Bus-naamruimte.

  4. Vervang <TOPIC NAME> door de naam van het onderwerp.

  5. Voer vervolgens de opdracht in een opdrachtprompt uit om dit bestand uit te voeren.

    node sendtotopic.js
    
  6. 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.

  1. Open uw favoriete editor, bijvoorbeeld Visual Studio Code

  2. 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);
     });
    
  3. Vervang <SERVICE BUS NAMESPACE CONNECTION STRING> door de verbindingsreeks naar uw naamruimte.

  4. Vervang <TOPIC NAME> door de naam van het onderwerp.

  5. Vervang <SUBSCRIPTION NAME> door de naam van het abonnement op het onderwerp.

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

Incoming and outgoing messages

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.

Updated topic page

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.

Active message count

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: