Odesílání zpráv do tématu azure Service Bus a příjem zpráv z odběrů do tématu (JavaScript)

V tomto kurzu zjistíte, jak pomocí balíčku v javascriptového programu odesílat zprávy do tématu Service Bus přijímat zprávy z odběru Service Bus k @azure/service-bus tomuto tématu.

Poznámka

Tento rychlý start obsahuje podrobné pokyny pro jednoduchý scénář odesílání dávky zpráv do Service Bus tématu a příjem těchto zpráv z odběru tématu. Předem vytvořené ukázky JavaScriptu a TypeScriptu pro Azure Service Bus najdete v úložišti Sady Azure SDK pro JavaScript na GitHub.

Požadavky

  • Předplatné Azure. K dokončení tohoto kurzu potřebujete mít účet Azure. Můžete si aktivovat výhody předplatitele MSDN nebo si zaregistrovat bezplatný účet.
  • Postupujte podle kroků v rychlém startu:Azure Portal k vytvoření Service Bus tématu a odběrů tématu . Poznamenejte si připojovací řetězec, název tématu a název předplatného. Pro tento rychlý start budete používat pouze jedno předplatné.

Poznámka

  • Tento kurz funguje s ukázkou, kterou můžete zkopírovat a spustit pomocí Nodejs. Pokyny k vytvoření aplikace Node.js najdete v tématu Vytvoření a nasazení aplikace Node.js na web Azurenebo v tématuNode.js Cloud Service pomocí Windows PowerShell.

Instalace balíčku pomocí Node Package Manageru (NPM)

Pokud chcete nainstalovat balíček npm pro Service Bus, otevřete příkazový řádek, který má v cestě , změňte adresář na složku, ve které chcete ukázky mít, a pak spusťte npm tento příkaz.

npm install @azure/service-bus

Odeslání zprávy do tématu

Následující ukázkový kód ukazuje, jak odeslat dávku zpráv do Service Bus tématu. Podrobnosti najdete v komentářích ke kódu.

  1. Otevřete oblíbený editor, například Visual Studio Code

  2. Vytvořte soubor s názvem a sendtotopic.js vložte do něj následující kód. Tento kód odešle zprávu do vašeho tématu.

    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. Nahraďte <SERVICE BUS NAMESPACE CONNECTION STRING> připojovacím řetězcem pro váš Service Bus názvů.

  4. Nahraďte <TOPIC NAME> názvem tématu.

  5. Pak spusťte příkaz na příkazovém řádku, aby se tento soubor spouštěl.

    node sendtotopic.js 
    
  6. Měli byste vidět následující výstup.

    Sent a batch of messages to the topic: mytopic
    

Příjem zpráv z odběru

  1. Otevřete oblíbený editor, například Visual Studio Code

  2. Vytvořte soubor s názvem receivefromsubscription.js a vložte do něj následující kód. Podrobnosti najdete v komentářích ke kódu.

    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. Nahraďte <SERVICE BUS NAMESPACE CONNECTION STRING> připojovacím řetězcem k oboru názvů.

  4. Nahraďte <TOPIC NAME> názvem tématu.

  5. Nahraďte <SUBSCRIPTION NAME> názvem odběru tématu.

  6. Pak spusťte příkaz na příkazovém řádku, aby se tento soubor spouštěl.

    node receivefromsubscription.js
    
  7. Měli byste vidět následující výstup.

    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
    

V Azure Portal přejděte do svého oboru názvů Service Bus a výběrem tématu v dolním podokně zobrazte stránku Service Bus téma pro vaše téma. Na této stránce by se v grafu Zprávy měly zobrazit tři příchozí a tři odchozí zprávy.

Příchozí a odchozí zprávy

Pokud příště spustíte jenom aplikaci pro odesílání, na stránce Service Bus Topic (Téma) uvidíte šest příchozích zpráv (3 nové), ale tři odchozí zprávy.

Aktualizovaná stránka tématu

Pokud na této stránce vyberete předplatné, dostanete se na stránku Service Bus předplatného. Na této stránce se můžete podívat na počet aktivních zpráv, počet zpráv bez zprávy a další informace. V tomto příkladu jsou tři aktivní zprávy, které příjemce ještě neobdrží.

Počet aktivních zpráv

Další kroky

Projděte si následující dokumentaci a ukázky: