Berichten verzenden naar een Azure Service Bus en berichten ontvangen van abonnementen op het onderwerp (JavaScript)

In deze zelfstudie leert u hoe u het @azure/service-bus-pakket in een JavaScript-programma kunt gebruiken om berichten te versturen naar een Service Bus-onderwerp en berichten te ontvangen van een Service Bus-abonnement naar dat onderwerp.

Notitie

Deze quickstart bevat stapsgewijs instructies voor een eenvoudig scenario voor het verzenden van een batch berichten naar een Service Bus-onderwerp en het ontvangen van die berichten van een abonnement van het onderwerp. U vindt vooraf gebouwde JavaScript- en TypeScript-voorbeelden voor Azure Service Bus in de azure SDKvoor JavaScript-opslagplaats op GitHub .

Vereisten

Notitie

Node Package Manager (NPM) gebruiken om het pakket te installeren

Als u het npm-pakket voor Service Bus wilt installeren, opent u een opdrachtprompt met npm in het bijbehorende pad. Wijzig de directory in de map waar u de voorbeelden wilt maken en voer vervolgens deze opdracht uit.

npm install @azure/service-bus

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.

  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.

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

  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 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. 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
    
  7. 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 het Azure Portal naar uw Service Bus-naamruimte en selecteer het onderwerp in het onderste deelvenster om de pagina Service Bus-onderwerp te bekijken voor uw onderwerp. Op deze pagina ziet u drie inkomende en drie uitgaande berichten in de grafiek Berichten.

Inkomende en uitgaande berichten

Als u de volgende keer op de pagina Service Bus-onderwerp een app verzenden uitvoert, ziet u zes inkomende berichten (3 nieuw), maar drie uitgaande berichten.

Bijgewerkte onderwerppagina

Als u op deze pagina een abonnement selecteert, krijgt u toegang tot 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 drie actieve berichten die nog niet zijn ontvangen door een ontvanger.

Aantal actieve berichten

Volgende stappen

Raadpleeg de volgende documentatie en voorbeelden: