Odesílání zpráv do front Azure Service Bus a příjem zpráv (JavaScript)

V tomto kurzu provedete následující kroky:

  1. Pomocí webu Azure Portal vytvoříme obor názvů služby Service Bus.
  2. Pomocí webu Azure Portal vytvoříme frontu služby Service Bus.
  3. Napište javascriptovou aplikaci pro použití balíčku @azure/service-bus do:
    1. Odešlete do fronty sadu zpráv.
    2. Tyto zprávy obdržíte z fronty.

Poznámka:

Tento rychlý start obsahuje podrobné pokyny pro jednoduchý scénář odesílání zpráv do fronty služby Service Bus a jejich přijímání. Předem připravené ukázky JavaScriptu a TypeScriptu pro Azure Service Bus najdete v úložišti Azure SDK pro JavaScript na GitHubu.

Požadavky

Pokud s touto službou teprve začínáte, přečtěte si před tímto rychlým startem přehled služby Service Bus.

Pokud chcete tento rychlý start použít s vlastním účtem Azure, potřebujete:

  • Nainstalujte Azure CLI, které poskytuje ověřování bez hesla pro váš vývojářský počítač.
  • Přihlaste se pomocí svého účtu Azure na terminálu nebo na příkazovém řádku pomocí az loginpříkazu .
  • Stejný účet použijte, když do prostředku přidáte příslušnou roli dat.
  • Spusťte kód ve stejném terminálu nebo příkazovém řádku.
  • Poznamenejte si název fronty pro obor názvů služby Service Bus. Budete ho potřebovat v kódu.

Poznámka:

Tento kurz funguje s ukázkami, které můžete kopírovat a spouštět pomocí Nodejs. Pokyny k vytvoření Node.js aplikace najdete v tématu Vytvoření a nasazení Node.js aplikace na web Azure nebo Node.js cloudové služby pomocí Windows PowerShellu.

Vytvoření oboru názvů na webu Azure Portal

Pokud chcete začít používat entity zasílání zpráv služby Service Bus v Azure, musíte nejprve vytvořit obor názvů s jedinečným názvem v rámci Azure. Obor názvů poskytuje kontejner oborů pro prostředky služby Service Bus (fronty, témata atd.) v rámci vaší aplikace.

Vytvoření oboru názvů:

  1. Přihlaste se k portálu Azure.

  2. Přejděte na stránku Všechny služby.

  3. Na levém navigačním panelu vyberte Možnost Integrace ze seznamu kategorií, najeďte myší na Service Bus a pak vyberte + tlačítko na dlaždici Service Bus.

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

  4. Na stránce Základy na stránce Vytvořit obor názvů postupujte takto:

    1. V části Předplatné zvolte předplatné Azure, ve kterém chcete vytvořit obor názvů.

    2. V části Skupina prostředků zvolte existující skupinu prostředků, ve které bude obor názvů aktivní, nebo vytvořte novou.

    3. Zadejte název oboru názvů. Název oboru názvů by měl dodržovat následující zásady vytváření názvů:

      • Název musí být jedinečný v rámci Azure. Systém okamžitě kontroluje, jestli je název dostupný.
      • Délka názvu je nejméně 6 a maximálně 50 znaků.
      • Název může obsahovat pouze písmena, číslice, pomlčky -.
      • Název musí začínat písmenem a končit písmenem nebo číslem.
      • Název nekončí "-sb" nebo "-mgmt".
    4. V části Umístění zvolte oblast, ve které má být váš obor názvů hostovaný.

    5. V části Cenová úroveň vyberte cenovou úroveň (Basic, Standard nebo Premium) pro obor názvů. Pro účely tohoto rychlého startu vyberte Standard.

      Důležité

      Pokud chcete použít témata a předplatná, zvolte Standard nebo Premium. Témata nebo předplatná se nepodporují v cenové úrovni Basic.

      Pokud jste vybrali cenovou úroveň Premium , zadejte počet jednotek zasílání zpráv. Úroveň Premium poskytuje izolaci prostředků na úrovni procesoru a paměti, aby každá úloha běžela izolovaně. Kontejner prostředků se nazývá jednotka zasílání zpráv. Obor názvů premium má alespoň jednu jednotku zasílání zpráv. Pro každý obor názvů služby Service Bus Premium můžete vybrat 1, 2, 4, 8 nebo 16 jednotek zasílání zpráv. Další informace najdete v tématu Zasílání zpráv Service Bus Premium.

    6. Vyberte Zkontrolovat a vytvořit v dolní části stránky.

      Image showing the Create a namespace page

    7. Na stránce Zkontrolovat a vytvořit zkontrolujte nastavení a vyberte Vytvořit.

  5. Po úspěšném nasazení prostředku vyberte na stránce nasazení možnost Přejít k prostředku .

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

  6. Zobrazí se domovská stránka vašeho oboru názvů služby Service Bus.

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

Vytvoření fronty na webu Azure Portal

  1. Na stránce Obor názvů služby Service Bus vyberte fronty v levé navigační nabídce.

  2. Na stránce Fronty vyberte na panelu nástrojů + Fronta.

  3. Zadejte název fronty a ostatní hodnoty ponechte ve výchozím nastavení.

  4. Teď vyberte Vytvořit.

    Image showing creation of a queue in the portal

Ověření aplikace v Azure

Tento rychlý start ukazuje dva způsoby připojení ke službě Azure Service Bus: bez hesla a připojovací řetězec.

První možnost ukazuje, jak se pomocí objektu zabezpečení v Microsoft Entra ID a řízení přístupu na základě role (RBAC) připojit k oboru názvů služby Service Bus. Nemusíte se starat o pevně zakódované připojovací řetězec v kódu nebo v konfiguračním souboru nebo v zabezpečeném úložišti, jako je Azure Key Vault.

Druhá možnost ukazuje, jak se pomocí připojovací řetězec připojit k oboru názvů služby Service Bus. Pokud s Azure začínáte, možná zjistíte, že připojovací řetězec možnost bude jednodušší postupovat. Doporučujeme používat možnost bez hesla v reálných aplikacích a produkčních prostředích. Další informace najdete v tématu Ověřování a autorizace. Další informace o ověřování bez hesla najdete na stránce přehledu.

Přiřazení rolí uživateli Microsoft Entra

Při místním vývoji se ujistěte, že uživatelský účet, který se připojuje ke službě Azure Service Bus, má správná oprávnění. K odesílání a příjmu zpráv budete potřebovat roli Vlastník dat služby Azure Service Bus. K přiřazení této role budete potřebovat roli Uživatelský přístup Správa istrator nebo jinou roli, která tuto akci zahrnujeMicrosoft.Authorization/roleAssignments/write. Role Azure RBAC můžete uživateli přiřadit pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu. Další informace o dostupných oborech pro přiřazení rolí najdete na stránce přehledu oboru.

Následující příklad přiřadí roli k vašemu uživatelskému Azure Service Bus Data Owner účtu, který poskytuje úplný přístup k prostředkům služby Azure Service Bus. V reálném scénáři postupujte podle principu nejnižšího oprávnění , aby uživatelům poskytla pouze minimální oprávnění potřebná pro bezpečnější produkční prostředí.

Předdefinované role Azure pro Azure Service Bus

Pro Službu Azure Service Bus je správa oborů názvů a všech souvisejících prostředků prostřednictvím webu Azure Portal a rozhraní API pro správu prostředků Azure už chráněná pomocí modelu Azure RBAC. Azure poskytuje následující předdefinované role Azure pro autorizaci přístupu k oboru názvů služby Service Bus:

  • Vlastník dat služby Azure Service Bus: Umožňuje přístup k datům k oboru názvů služby Service Bus a jeho entitám (fronty, témata, odběry a filtry). Člen této role může odesílat a přijímat zprávy z front nebo témat nebo odběrů.
  • Odesílatel dat služby Azure Service Bus: Pomocí této role můžete udělit přístup k oboru názvů služby Service Bus a jeho entitám.
  • Příjemce dat služby Azure Service Bus: Pomocí této role můžete udělit přístup k oboru názvů služby Service Bus a jeho entitám.

Pokud chcete vytvořit vlastní roli, přečtěte si téma Práva potřebná pro operace služby Service Bus.

Přidání uživatele Microsoft Entra do role vlastníka služby Azure Service Bus

Přidejte své uživatelské jméno Microsoft Entra do role Vlastník dat služby Azure Service Bus na úrovni oboru názvů služby Service Bus. Umožní aplikaci spuštěnou v kontextu vašeho uživatelského účtu odesílat zprávy do fronty nebo tématu a přijímat zprávy z fronty nebo odběru tématu.

Důležité

Ve většině případů bude trvat minutu nebo dvě, než se přiřazení role rozšíří v Azure. Ve výjimečných případech může trvat až osm minut. Pokud při prvním spuštění kódu dojde k chybám ověřování, chvíli počkejte a zkuste to znovu.

  1. Pokud nemáte na webu Azure Portal otevřenou stránku Obor názvů služby Service Bus, najděte obor názvů služby Service Bus pomocí hlavního vyhledávacího panelu nebo levé navigace.

  2. Na stránce přehledu vyberte v nabídce vlevo řízení přístupu (IAM ).

  3. Na stránce Řízení přístupu (IAM) vyberte kartu Přiřazení rolí.

  4. V horní nabídce vyberte + Přidat a potom přidejte přiřazení role z výsledné rozevírací nabídky.

    A screenshot showing how to assign a role.

  5. Pomocí vyhledávacího pole vyfiltrujte výsledky podle požadované role. V tomto příkladu vyhledejte Azure Service Bus Data Owner a vyberte odpovídající výsledek. Pak zvolte Další.

  6. V části Přiřadit přístup vyberte Uživatel, skupina nebo instanční objekt a pak zvolte + Vybrat členy.

  7. V dialogovém okně vyhledejte své uživatelské jméno Microsoft Entra (obvykle vaše user@domain e-mailová adresa) a pak v dolní části dialogového okna zvolte Vybrat .

  8. Vyberte Zkontrolovat a přiřadit přejděte na poslední stránku a pak proces dokončete opětovnou kontrolou a přiřazením .

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

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

  2. Nainstalujte následující balíčky:

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

Zasílání zpráv do fronty

Následující ukázkový kód ukazuje, jak odeslat zprávu do fronty.

Abyste mohli místnímu počítači poskytnout ověřování bez hesla vyžadované v tomto kódu, musíte se přihlásit pomocí Azure CLI az login .

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

  2. Vytvořte volaný send.js soubor a vložte do něj následující kód. Tento kód odešle jména vědců jako zprávy do vaší fronty.

    Důležité

    Přihlašovací údaje bez hesla jsou k dispozici s 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();
    
    // name of the queue
    const queueName = "<QUEUE 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 topic.
        const sender = sbClient.createSender(queueName);
    
        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 queue
            await sender.sendMessages(batch);
    
            console.log(`Sent a batch of messages to the queue: ${queueName}`);
    
            // 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> oborem názvů služby Service Bus.

  4. Nahraďte <QUEUE NAME> názvem fronty.

  5. Potom spusťte příkaz v příkazovém řádku, který spustí tento soubor.

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

    Sent a batch of messages to the queue: myqueue
    

Příjem zpráv z fronty

Abyste mohli místnímu počítači poskytnout ověřování bez hesla vyžadované v tomto kódu, musíte se přihlásit pomocí Azure CLI az login .

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

  2. Vytvořte volaný receive.js soubor a vložte do něj následující kód.

    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();
    
    // name of the queue
    const queueName = "<QUEUE 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 subscription.
        const receiver = sbClient.createReceiver(queueName);
    
        // 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(20000);
    
        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> oborem názvů služby Service Bus.

  4. Nahraďte <QUEUE NAME> názvem fronty.

  5. Potom spusťte příkaz v příkazovém řádku, který spustí tento soubor.

    node receive.js
    

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

Na stránce Přehled oboru názvů služby Service Bus na webu Azure Portal můžete zobrazit počet příchozích a odchozích zpráv. Možná budete muset chvíli počkat a pak stránku aktualizovat, aby se zobrazily nejnovější hodnoty.

Incoming and outgoing message count

Výběrem fronty na této stránce Přehled přejděte na stránku Fronta služby Service Bus. Na této stránce se zobrazuje také počet příchozích a odchozích zpráv. Zobrazí se také další informace, jako je aktuální velikost fronty, maximální velikost, počet aktivních zpráv atd.

Queue details

Řešení problému

Pokud se při spuštění verze javascriptového kódu bez hesla zobrazí jedna z následujících chyb, ujistěte se, že jste přihlášení pomocí příkazu Azure CLI a az loginže se na uživatelský účet Azure použije příslušná role :

  • K provedení této operace se vyžadují deklarace identity "Odeslat".
  • K provedení této operace se vyžadují deklarace identity příjmu.

Vyčištění prostředků

Přejděte do oboru názvů služby Service Bus na webu Azure Portal a výběrem možnosti Odstranit na webu Azure Portal odstraňte obor názvů a frontu v něm.

Další kroky

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