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

I den här självstudien lär du dig hur du använder paketet i ett JavaScript-program för att skicka meddelanden till ett Service Bus-ämne och ta emot meddelanden från en @azure/service-bus Service Bus-prenumeration till det ämnet.

Anteckning

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

Förutsättningar

Anteckning

Installera paketet med NPM (Node Package Manager)

Om du vill installera npm-paketet för Service Bus öppnar du en kommandotolk som har i sökvägen, ändrar katalogen till den mapp där du vill ha exemplen och kör sedan npm det här kommandot.

npm install @azure/service-bus

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

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

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

    const { ServiceBusClient } = require("@azure/service-bus");
    
    const connectionString = "<SERVICE BUS NAMESPACE CONNECTION STRING>"
    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 connection string to the Service Bus namespace
        const sbClient = new ServiceBusClient(connectionString);
    
        // 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 arry         
    
                // 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ängen 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

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

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

    const { delay, ServiceBusClient, ServiceBusMessage } = require("@azure/service-bus");
    
    const connectionString = "<SERVICE BUS NAMESPACE CONNECTION STRING>"
    const topicName = "<TOPIC NAME>";
    const subscriptionName = "<SUBSCRIPTION NAME>";
    
     async function main() {
        // create a Service Bus client using the connection string to the Service Bus namespace
        const sbClient = new ServiceBusClient(connectionString);
    
        // 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ängen 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
    
  7. 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 Portal du till ditt Service Bus och väljer ämnet i det nedre fönstret för att se sidan Service Bus ämne för ditt ämne. På den här sidan bör du se tre inkommande och tre utgående meddelanden i diagrammet Meddelanden.

Inkommande och utgående meddelanden

Om du kör den enda skicka appen nästa gång visas sex inkommande meddelanden (3 nya) men tre utgående meddelanden på sidan Service Bus ämne.

Uppdaterad ämnessida

Om du väljer en prenumeration på den här sidan kommer du till sidan Service Bus prenumeration. Du kan se antal aktiva meddelanden, antal meddelanden med dead letter och mer på den här sidan. I det här exemplet finns det tre aktiva meddelanden som inte har tagits emot av en mottagare ännu.

Antal aktiva meddelanden

Nästa steg

Se följande dokumentation och exempel: