Sdílet prostřednictvím


Odesílání zpráv do tématu služby Azure Service Bus a příjem zpráv z odběrů do tématu (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 téma služby Service Bus.
  3. Pomocí webu Azure Portal vytvoříme k tomuto tématu odběr služby Service Bus.
  4. Napište javascriptovou aplikaci pro použití balíčku @azure/service-bus do:
    • Odešle sadu zpráv do tématu.
    • Tyto zprávy obdržíte z odběru.

Poznámka:

Tento rychlý start obsahuje podrobné pokyny pro jednoduchý scénář odeslání dávky zpráv do tématu služby Service Bus a příjem těchto zpráv z odběru tématu. 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 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.
  • Spusťte kód ve stejném terminálu nebo příkazovém řádku.
  • Poznamenejte si název tématu a předplatné pro obor názvů služby Service Bus. Budete ho potřebovat v kódu.

Poznámka:

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

Pokud chcete začít používat entity zasílání zpráv Service Bus v Azure, vytvořte obor názvů s názvem, který je jedinečný v rámci Azure. Obor názvů poskytuje kontejner oborů pro prostředky služby Service Bus, jako jsou fronty a témata, ve vaší aplikaci.

Vytvoření oboru názvů:

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

  2. V levém horním rohu vyberte kontextovou nabídku a přejděte na stránku Všechny služby.

  3. Na levém navigačním panelu vyberte Integrace.

  4. Posuňte se dolů ke službám zasílání zpráv>Service Bus a vyberte Vytvořit.

    Snímek obrazovky znázorňující výběr možnosti Vytvořit prostředek, integraci a potom Service Bus v nabídce

  5. Na kartě Základy na stránce Vytvořit obor názvů postupujte podle těchto kroků:

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

    2. Pro skupinu prostředků zvolte existující skupinu prostředků nebo vytvořte novou.

    3. Zadejte název oboru názvů, který splňuje následující konvence pojmenování.

      • 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 pro hostování vašeho oboru názvů.

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

      Pokud vyberete úroveň Premium , můžete pro obor názvů povolit geografickou replikaci . Funkce geografické replikace zajišťuje, aby se metadata a data oboru názvů průběžně replikovaly z primární oblasti do jedné nebo více sekundárních oblastí.

      Důležité

      Pokud chcete použít témata a předplatná, zvolte Standard nebo Premium. Témata a 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 Úroveň zasílání zpráv služby Service Bus úrovně Premium.

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

      Snímek obrazovky zobrazující stránku pro vytvoření oboru názvů

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

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

    Snímek obrazovky zobrazující stránku s informací o úspěšném nasazení s odkazem

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

    Snímek obrazovky znázorňující domovskou stránku vytvořeného oboru názvů služby Service Bus

Vytvoření tématu pomocí webu Azure Portal

  1. Na stránce Obor názvů služby Service Bus rozbalte entity v navigační nabídce vlevo a v nabídce vlevo vyberte Témata.

  2. Na panelu nástrojů vyberte + Téma .

  3. Zadejte název tématu. U ostatních možností ponechte jejich výchozí hodnoty.

  4. Vyberte Vytvořit.

    Snímek obrazovky se stránkou Vytvořit téma na webu Azure Portal

Vytvoření odběru tématu

  1. Vyberte téma, které jste vytvořili v předchozí části.

    Snímek obrazovky znázorňující výběr tématu ze seznamu témat

  2. Na stránce Téma služby Service Bus vyberte na panelu nástrojů možnost + Předplatné.

    Snímek obrazovky znázorňující tlačítko Přidat předplatné na stránce Téma

  3. Na stránce Vytvořit předplatné postupujte takto:

    1. Jako název předplatného zadejte S1.

    2. Potom vyberte Vytvořit a vytvořte předplatné.

      Snímek obrazovky se stránkou Vytvořit předplatné

Ověření aplikace v Azure

Tento článek 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 si dělat starosti s pevně zakódovaným připojovacím řetězcem v kódu, 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 je 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 služby Service Bus. Další informace o ověřování bez hesla najdete v tématu Ověřování aplikací .NET.

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 potřebujete roli Vlastník dat služby Azure Service Bus . K přiřazení této role potřebujete roli Správce uživatelských přístupů nebo jinou roli, která tuto Microsoft.Authorization/roleAssignments/write akci zahrnuje.

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 v tématu Vysvětlení rozsahu pro Azure RBAC.

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í a udělte uživatelům 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:

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. Tato konfigurace umožňuje aplikaci, která běží v kontextu uživatelského účtu, odesílat zprávy do fronty nebo tématu. Může přijímat zprávy z fronty nebo z předplatného tématu.

Důležité

Ve většině případů trvá přiřazení role v Azure minutu nebo dvě. 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řehled 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 pak přidejte přiřazení role.

    Snímek obrazovky znázorňující, jak přiřadit roli

  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
    

Odeslání zprávy do tématu

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

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ý sendtotopic.js soubor a vložte do něj následující kód. Tento kód odešle zprávu do vašeho tématu.

    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();
    
    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. Nahraďte <SERVICE BUS NAMESPACE CONNECTION STRING> připojovací řetězec oborem názvů služby Service Bus.

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

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

    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

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

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

  5. Nahraďte <SUBSCRIPTION NAME> názvem předplatného tématu.

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

    node receivefromsubscription.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 webu Azure Portal přejděte do oboru názvů služby Service Bus, v dolním podokně přepněte na Témata a vyberte téma, kde se zobrazí stránka Téma služby Service Bus pro vaše téma. Na této stránce byste měli v grafu Zprávy vidět 10 příchozích a 10 odchozích zpráv.

Příchozí a odchozí zprávy

Pokud příště spustíte jenom aplikaci pro odesílání, zobrazí se na stránce Téma služby Service Bus 20 příchozích zpráv (10 nových), ale 10 odchozích zpráv.

Aktualizovaná stránka tématu

Pokud na této stránce vyberete předplatné v dolním podokně, dostanete se na stránku Předplatné služby Service Bus. Na této stránce můžete vidět počet aktivních zpráv, počet nedoručených zpráv a další informace. V tomto příkladu je 10 aktivních zpráv, které ještě příjemce nepřijal.

Počet aktivních zpráv

Řešení problému

Pokud se při spuštění verze javascriptového kódu bez hesla zobrazí chyba týkající se požadovaných deklarací identity, ujistěte se, že jste přihlášení pomocí příkazu Azure CLI a az loginpříslušná role se použije na uživatelský účet Azure.

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: