Skicka meddelanden till ett Azure Service Bus-ämne och ta emot meddelanden från prenumerationer till ämnet (JavaScript)

I den här självstudien gör du följande:

  1. Skapa ett Service Bus-namnområde med Azure Portal.
  2. Skapa ett Service Bus-ämne med Azure Portal.
  3. Skapa en Service Bus-prenumeration på ämnet med Azure Portal.
  4. Skriv ett JavaScript-program för att använda paketet @azure/service-bus för att:
    • Skicka en uppsättning meddelanden till ämnet.
    • Ta emot dessa meddelanden från prenumerationen.

Kommentar

Den här snabbstarten innehåller stegvisa instruktioner för ett enkelt scenario med att skicka en batch meddelanden till ett Service Bus-ämne och ta emot dessa meddelanden från en prenumeration på ämnet. Du hittar fördefinierade JavaScript- och TypeScript-exempel för Azure Service Bus i Azure SDK för JavaScript-lagringsplatsen på GitHub.

Förutsättningar

Om du vill använda den här snabbstarten med ditt eget Azure-konto behöver du:

  • Installera Azure CLI, som tillhandahåller lösenordslös autentisering till utvecklardatorn.
  • Logga in med ditt Azure-konto i terminalen eller kommandotolken med az login.
  • Använd samma konto när du lägger till lämplig roll i resursen.
  • Kör koden i samma terminal eller kommandotolk.
  • Anteckna ämnesnamnetoch prenumerationen för Service Bus-namnområdet. Du behöver det i koden.

Kommentar

Skapa ett namnområde i Azure Portal

För att komma igång med Service Bus-meddelandeentiteter i Azure måste du först skapa ett namnområde med ett namn som är unikt i Azure. Ett namnområde tillhandahåller en omfångscontainer för Service Bus-resurser (köer, ämnen osv.) i ditt program.

Så här skapar du ett namnområde:

  1. Logga in på Azure-portalen.

  2. Gå till sidan Alla tjänster.

  3. I det vänstra navigeringsfältet väljer du Integrering i listan över kategorier, hovra musen över Service Bus och välj + sedan knappen på Service Bus-panelen.

    Image showing selection of Create a resource, Integration, and then Service Bus in the menu.

  4. Följ dessa steg i taggen Grundläggande på sidan Skapa namnområde:

    1. För Prenumeration väljer du en Azure-prenumeration där du ska skapa namnrymden.

    2. För Resursgrupp väljer du en befintlig resursgrupp där namnrymden ska finnas, eller så skapar du en ny.

    3. Ange ett namn för namnrymden. Namnområdesnamnet bör följa följande namngivningskonventioner:

      • Namnet måste vara unikt i Hela Azure. Systemet kontrollerar omedelbart om namnet är tillgängligt.
      • Namnlängden är minst 6 och högst 50 tecken.
      • Namnet får endast innehålla bokstäver, siffror, bindestreck "-".
      • Namnet måste börja med en bokstav och sluta med en bokstav eller siffra.
      • Namnet slutar inte med "-sb" eller "-mgmt".
    4. För Plats väljer du land eller region där namnrymden ska finnas.

    5. För Prisnivå väljer du prisnivån (Basic, Standard eller Premium) för namnområdet. För den här snabbstarten väljer du Standard.

      Viktigt!

      Om du vill använda ämnen och prenumerationer väljer du antingen Standard eller Premium. Ämnen/prenumerationer stöds inte på prisnivån Basic.

      Om du har valt prisnivån Premium anger du antalet meddelandeenheter. Premium-nivån ger resursisolering på processor- och minnesnivå så att varje arbetsbelastning körs självständigt. Den här resurscontainern kallas för en meddelandefunktionsenhet. Ett premiumnamnområde har minst en meddelandeenhet. Du kan välja 1, 2, 4, 8 eller 16 meddelandeenheter för varje Service Bus Premium-namnområde. Mer information finns i Service Bus Premium-meddelanden.

    6. Välj Granska + skapa längst ned på sidan.

      Image showing the Create a namespace page

    7. På sidan Granska + skapa granskar du inställningarna och väljer Skapa.

  5. När distributionen av resursen har slutförts väljer du Gå till resurs på distributionssidan.

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

  6. Startsidan för din Service Bus-namnrymd visas.

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

Skapa ett ämne med Azure Portal

  1. På sidan Service Bus Namespace (Service Bus-namnrymd) väljer du Ämnen på den vänstra menyn.

  2. Välj + Ämne i verktygsfältet.

  3. Ange ett namn för ämnet. Lämna standardvärdena för de andra alternativen.

  4. Välj Skapa.

    Image showing the Create topic page.

Skapa en prenumeration på ämnet

  1. Välj det ämne som du skapade i föregående avsnitt.

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

  2. På sidan Service Bus-ämne väljer du + Prenumeration i verktygsfältet.

    Image showing the Add subscription button.

  3. Följ dessa steg på sidan Skapa prenumeration :

    1. Ange S1 som namn på prenumerationen.

    2. Ange 3 för Maximalt antal leveranser.

    3. Välj sedan Skapa för att skapa prenumerationen.

      Image showing the Create subscription page.

Autentisera appen till Azure

Den här snabbstarten visar två sätt att ansluta till Azure Service Bus: lösenordsfri och anslutningssträng.

Det första alternativet visar hur du använder ditt säkerhetsobjekt i Microsoft Entra-ID och rollbaserad åtkomstkontroll (RBAC) för att ansluta till ett Service Bus-namnområde. Du behöver inte oroa dig för att ha hårdkodade anslutningssträng i koden eller i en konfigurationsfil eller i ett säkert lagringsutrymme som Azure Key Vault.

Det andra alternativet visar hur du använder en anslutningssträng för att ansluta till ett Service Bus-namnområde. Om du är nybörjare på Azure kan det vara enklare att följa anslutningssträng alternativet. Vi rekommenderar att du använder det lösenordslösa alternativet i verkliga program och produktionsmiljöer. Mer information finns i Autentisering och auktorisering. Du kan också läsa mer om lösenordslös autentisering på översiktssidan.

Tilldela roller till din Microsoft Entra-användare

När du utvecklar lokalt kontrollerar du att användarkontot som ansluter till Azure Service Bus har rätt behörigheter. Du behöver rollen Azure Service Bus-dataägare för att kunna skicka och ta emot meddelanden. Om du vill tilldela dig själv den här rollen behöver du rollen Administratör för användaråtkomst eller en annan roll som innehåller åtgärden Microsoft.Authorization/roleAssignments/write . Du kan tilldela Azure RBAC-roller till en användare med hjälp av Azure-portalen, Azure CLI eller Azure PowerShell. Läs mer om tillgängliga omfång för rolltilldelningar på översiktssidan för omfång .

I följande exempel tilldelas Azure Service Bus Data Owner rollen till ditt användarkonto, vilket ger fullständig åtkomst till Azure Service Bus-resurser. I ett verkligt scenario följer du principen om lägsta behörighet för att ge användarna endast de minsta behörigheter som krävs för en säkrare produktionsmiljö.

Inbyggda Azure-roller för Azure Service Bus

För Azure Service Bus skyddas redan hanteringen av namnområden och alla relaterade resurser via Azure-portalen och Azure-resurshanterings-API:et med hjälp av Azure RBAC-modellen. Azure tillhandahåller de inbyggda Azure-rollerna nedan för att auktorisera åtkomst till ett Service Bus-namnområde:

  • Azure Service Bus-dataägare: Ger dataåtkomst till Service Bus-namnområdet och dess entiteter (köer, ämnen, prenumerationer och filter). En medlem i den här rollen kan skicka och ta emot meddelanden från köer eller ämnen/prenumerationer.
  • Azure Service Bus Data Sender: Använd den här rollen för att ge sändningsåtkomst till Service Bus-namnområdet och dess entiteter.
  • Azure Service Bus-datamottagare: Använd den här rollen för att ge ta emot åtkomst till Service Bus-namnområdet och dess entiteter.

Om du vill skapa en anpassad roll läser du Rättigheter som krävs för Service Bus-åtgärder.

Lägga till Microsoft Entra-användare i rollen Som Azure Service Bus-ägare

Lägg till ditt Microsoft Entra-användarnamn i rollen Azure Service Bus-dataägare på Service Bus-namnområdesnivå. Det gör att en app som körs i kontexten för ditt användarkonto kan skicka meddelanden till en kö eller ett ämne och ta emot meddelanden från en kö eller ett ämnes prenumeration.

Viktigt!

I de flesta fall tar det en minut eller två innan rolltilldelningen sprids i Azure. I sällsynta fall kan det ta upp till åtta minuter. Om du får autentiseringsfel när du först kör koden väntar du en stund och försöker igen.

  1. Om du inte har sidan Service Bus-namnområde öppen i Azure-portalen letar du upp Service Bus-namnområdet med hjälp av huvudsökfältet eller det vänstra navigeringsfältet.

  2. På översiktssidan väljer du Åtkomstkontroll (IAM) på den vänstra menyn.

  3. På sidan Åtkomstkontroll (IAM) väljer du fliken Rolltilldelningar .

  4. Välj + Lägg till på den översta menyn och sedan Lägg till rolltilldelning från den resulterande nedrullningsbara menyn.

    A screenshot showing how to assign a role.

  5. Använd sökrutan för att filtrera resultatet till önskad roll. I det här exemplet söker Azure Service Bus Data Owner du efter och väljer matchande resultat. Välj sedan Nästa.

  6. Under Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn och sedan + Välj medlemmar.

  7. I dialogrutan söker du efter ditt Microsoft Entra-användarnamn (vanligtvis din user@domain e-postadress) och väljer sedan Välj längst ned i dialogrutan.

  8. Välj Granska + tilldela för att gå till den sista sidan och sedan Granska + tilldela igen för att slutföra processen.

Installera paketet med NPM (Node Package Manager)

  1. Om du vill installera nödvändiga npm-paket för Service Bus öppnar du en kommandotolk som finns npm i sökvägen, ändrar katalogen till den mapp där du vill ha dina exempel och kör sedan det här kommandot.

  2. Installera följande paket:

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

Skicka meddelanden till ett ämne

Följande exempelkod visar hur du skickar en batch med meddelanden till ett Service Bus-ämne. Mer information finns i kodkommentar.

Du måste ha loggat in med Azure CLI för att din lokala dator ska kunna tillhandahålla den lösenordslösa az login autentisering som krävs i den här koden.

  1. Öppna din favoritredigerare, till exempel Visual Studio Code

  2. Skapa en fil med namnet sendtotopic.js och klistra in koden nedan i den. Den här koden skickar ett meddelande till ditt ämne.

    Viktigt!

    Den lösenordslösa autentiseringsuppgiften tillhandahålls med StandardAzureCredential.

    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. Ersätt <SERVICE BUS NAMESPACE CONNECTION STRING> med anslutningssträng till Service Bus-namnområdet.

  4. Ersätt <TOPIC NAME> med namnet på ämnet.

  5. Kör sedan kommandot i en kommandotolk för att köra den här filen.

    node sendtotopic.js
    
  6. Du bör se följande utdata.

    Sent a batch of messages to the topic: mytopic
    

Ta emot meddelanden från en prenumeration

Du måste ha loggat in med Azure CLI för att din lokala dator ska kunna tillhandahålla den lösenordslösa az login autentisering som krävs i den här koden.

  1. Öppna din favoritredigerare, till exempel Visual Studio Code

  2. Skapa en fil med namnet receivefromsubscription.js och klistra in följande kod i den. Mer information finns i kodkommentar.

    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. Ersätt <SERVICE BUS NAMESPACE CONNECTION STRING> med anslutningssträng till namnområdet.

  4. Ersätt <TOPIC NAME> med namnet på ämnet.

  5. Ersätt <SUBSCRIPTION NAME> med namnet på prenumerationen på ämnet.

  6. Kör sedan kommandot i en kommandotolk för att köra den här filen.

    node receivefromsubscription.js
    

Du bör se följande utdata.

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

I Azure-portalen navigerar du till Service Bus-namnområdet, växlar till Ämnen i det nedre fönstret och väljer ditt ämne för att se service bus-ämnessidan för ditt ämne. På den här sidan bör du se 10 inkommande och 10 utgående meddelanden i diagrammet Meddelanden .

Incoming and outgoing messages

Om du bara kör appen skicka nästa gång visas 20 inkommande meddelanden (10 nya) men 10 utgående meddelanden på sidan Service Bus-ämne .

Updated topic page

På den här sidan går du till sidan Service Bus-prenumeration om du väljer en prenumeration i den nedre rutan. Du kan se antalet aktiva meddelanden, antal meddelanden med obeställbara meddelanden med mera på den här sidan. I det här exemplet finns det 10 aktiva meddelanden som inte har tagits emot av en mottagare ännu.

Active message count

Felsökning

Om du får ett felmeddelande när du kör den lösenordslösa versionen av JavaScript-koden om nödvändiga anspråk kontrollerar du att du är inloggad via Azure CLI-kommandot az login och att lämplig roll tillämpas på ditt Azure-användarkonto.

Rensa resurser

Gå till Service Bus-namnområdet i Azure-portalen och välj Ta bort på Azure-portalen för att ta bort namnområdet och kön i det.

Nästa steg

Se följande dokumentation och exempel: