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

V tomto kurzu dokončíte 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 k:
    • Odešlete do tématu sadu zpráv.
    • Přijímejte tyto zprávy 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 použít tento rychlý start 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 .
  • Při přidávání příslušné role do prostředku použijte stejný účet.
  • Spusťte kód ve stejném terminálu nebo příkazovém řádku.
  • Poznamenejte si název tématu a předplatné pro váš 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 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 rozsahu pro prostředky Service Bus v rámci vaší aplikace.

Vytvoření oboru názvů:

  1. Přihlaste se k webu Azure Portal.

  2. V levém navigačním podokně portálu vyberte Všechny služby, v seznamu kategorií vyberte Integrace , najeďte myší na Service Bus a pak na dlaždici Service Bus vyberte Vytvořit .

    Obrázek znázorňující výběr možností Vytvořit prostředek, Integrace a potom Service Bus v nabídce

  3. Ve značce Základy na stránce Vytvořit obor názvů postupujte takto:

    1. Jako 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ů žít, nebo vytvořte novou.

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

      • Název musí být v rámci Azure jedinečný. Systém okamžitě kontroluje, jestli je název dostupný.
      • Délka názvu je minimálně 6 a maximálně 50 znaků.
      • Název může obsahovat pouze písmena, číslice, spojovníky "-".
      • Název musí začínat písmenem a končit písmenem nebo číslem.
      • Název nekončí na "-sb" nebo "-mgmt".
    4. Jako 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ů. V tomto rychlém startu vyberte Standardní.

      Důležité

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

      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 služby Service Bus Premium.

    6. V dolní části stránky vyberte Zkontrolovat a vytvořit .

      Obrázek znázorňující stránku Vytvoření oboru názvů

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

  4. Jakmile bude nasazení prostředku úspěšné, vyberte na stránce nasazení přejít k prostředku .

    Obrázek znázorňující stránku nasazení bylo úspěšné s odkazem Přejít na prostředek.

  5. Zobrazí se domovská stránka oboru názvů služby Service Bus.

    Obrázek 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 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.

    Obrázek znázorňující stránku Vytvořit téma

Vytvoření odběru tématu

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

    Obrázek 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ů + Předplatné .

    Obrázek znázorňující tlačítko Přidat předplatné

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

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

    2. Jako Maximální počet doručení zadejte 3.

    3. Pak vyberte Vytvořit a vytvořte předplatné.

      Obrázek znázorňující stránku Vytvořit předplatné

Ověření aplikace v Azure

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

První možnost ukazuje, jak použít objekt zabezpečení v Azure Active Directory a řízení přístupu na základě role (RBAC) pro připojení 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ího řetězce připojit k oboru názvů služby Service Bus. Pokud s Azure začínáte, bude pro vás jednodušší sledovat možnost připojovacího řetězce. V reálných aplikacích a produkčních prostředích doporučujeme používat možnost bez hesla. Další informace najdete v tématu Ověřování a autorizace. Další informace o ověřování bez hesla najdete také na stránce s přehledem.

Přiřazení rolí uživateli Azure AD

Při místním vývoji se ujistěte, že uživatelský účet, který se připojuje k Azure Service Bus, má správná oprávnění. Abyste mohli odesílat a přijímat zprávy, budete potřebovat roli vlastníka dat Azure Service Bus. K přiřazení této role budete potřebovat roli Správce uživatelských přístupů nebo jinou roli, která akci zahrnuje Microsoft.Authorization/roleAssignments/write . Role Azure RBAC můžete uživateli přiřadit pomocí Azure Portal, Azure CLI nebo Azure PowerShell. 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 vašemu Azure Service Bus Data Owner uživatelskému účtu, který poskytuje úplný přístup k Azure Service Bus prostředkům. V reálném scénáři dodržujte princip nejnižších oprávnění , abyste uživatelům poskytli jenom minimální oprávnění potřebná pro bezpečnější produkční prostředí.

Předdefinované role Azure pro Azure Service Bus

Pro Azure Service Bus je správa oborů názvů a všech souvisejících prostředků prostřednictvím 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:

  • Azure Service Bus Vlastník dat: Umožňuje přístup k datům k oboru názvů služby Service Bus a jeho entitám (frontám, tématům, předplatným a filtrům). Člen této role může odesílat a přijímat zprávy z front nebo témat nebo odběrů.
  • Azure Service Bus odesílatel dat: Tuto roli použijte k udělení přístupu k oboru názvů služby Service Bus a jeho entitám.
  • Azure Service Bus příjemce dat: Tuto roli použijte k udělení přístupu příjmu 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 požadovaná pro operace služby Service Bus.

Přidání uživatele Azure AD do role vlastníka Azure Service Bus

Přidejte své uživatelské jméno Azure AD do role vlastníka dat 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 to může trvat až osm minut. Pokud se při prvním spuštění kódu zobrazí chyby ověřování, chvíli počkejte a zkuste to znovu.

  1. Pokud v Azure Portal nemáte otevřenou stránku Obor názvů služby Service Bus, vyhledejte obor názvů služby Service Bus pomocí hlavního panelu hledání nebo levé navigace.

  2. Na stránce přehledu v nabídce vlevo vyberte Ří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 z výsledné rozevírací nabídky vyberte Přidat 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 k vyberte Uživatel, skupina nebo instanční objekt a pak zvolte + Vybrat členy.

  7. V dialogovém okně vyhledejte svoje uživatelské jméno Azure AD (obvykle user@domain e-mailovou adresu) a pak v dolní části dialogového okna zvolte Vybrat.

  8. Vyberte Zkontrolovat a přiřadit a přejděte na poslední stránku a pak znovu zkontrolovat a přiřadit a proces dokončete.

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ý obsahuje npm cestu, změňte adresář na složku, ve 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.

Pokud chcete, aby váš místní počítač poskytoval 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 sendtotopic.js a 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 { 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ím řetězcem k oboru názvů služby Service Bus.

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

  5. Potom spusťte příkaz na příkazovém řádku a spusťte 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

Pokud chcete, aby váš místní počítač poskytoval 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ím řetězcem k 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 na příkazovém řádku a spusťte 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

V 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 své téma, aby se zobrazila stránka Téma služby Service Bus pro vaše téma. Na této stránce byste měli vidět 10 příchozích a 10 odchozích zpráv v grafu Zprávy .

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 se můžete podívat na počet aktivních zpráv, počet nedoručených zpráv a další. V tomto příkladu je 10 aktivních zpráv, které příjemce ještě nepřijal.

Počet aktivních zpráv

Poradce při potížích

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

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

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

Další kroky

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