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:
- Pomocí webu Azure Portal vytvoříme obor názvů služby Service Bus.
- Pomocí webu Azure Portal vytvoříme téma služby Service Bus.
- Pomocí webu Azure Portal vytvoříme k tomuto tématu odběr služby Service Bus.
- 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
- 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.
- Node.js LTS
- Postupujte podle kroků v rychlém startu : Pomocí webu Azure Portal vytvořte téma a odběry služby Service Bus k tomuto tématu. Pro účely tohoto rychlého startu budete používat jenom jedno předplatné.
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 login
pří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:
- 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í aplikace Node.js na web Azure nebo Node.js cloudovou službu 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ů:
Přihlaste se k portálu Azure.
Přejděte na stránku Všechny služby.
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.
Na stránce Základy na stránce Vytvořit obor názvů postupujte takto:
V části Předplatné zvolte předplatné Azure, ve kterém chcete vytvořit obor názvů.
Pro skupinu prostředků zvolte existující skupinu prostředků nebo vytvořte novou.
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
.
V části Umístění zvolte oblast, ve které má být váš obor názvů hostovaný.
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 , vyberte, jestli pro obor názvů můžete povolit geografickou replikaci . Funkce geografické replikace zajišťuje, že se metadata a data oboru názvů průběžně replikují 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 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.
Vyberte Zkontrolovat a vytvořit v dolní části stránky.
Na stránce Zkontrolovat a vytvořit zkontrolujte nastavení a vyberte Vytvořit.
Po úspěšném nasazení prostředku vyberte na stránce nasazení možnost Přejít k prostředku .
Zobrazí se domovská stránka vašeho oboru názvů služby Service Bus.
Vytvoření tématu pomocí webu Azure Portal
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.
Na panelu nástrojů vyberte + Téma .
Zadejte název tématu. U ostatních možností ponechte jejich výchozí hodnoty.
Vyberte Vytvořit.
Vytvoření odběru tématu
Vyberte téma, které jste vytvořili v předchozí části.
Na stránce Téma služby Service Bus vyberte na panelu nástrojů možnost + Předplatné.
Na stránce Vytvořit předplatné postupujte takto:
Jako název předplatného zadejte S1.
Zadejte 3 pro maximální počet doručení.
Potom vyberte Vytvořit a vytvořte předplatné.
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 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 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.
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.
Na stránce přehledu vyberte v nabídce vlevo řízení přístupu (IAM ).
Na stránce Řízení přístupu (IAM) vyberte kartu Přiřazení rolí.
V horní nabídce vyberte + Přidat a potom přidejte přiřazení role z výsledné rozevírací nabídky.
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ší.V části Přiřadit přístup vyberte Uživatel, skupina nebo instanční objekt a pak zvolte + Vybrat členy.
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 .
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)
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.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
.
Otevřete oblíbený editor, například Visual Studio Code.
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); });
Nahraďte
<SERVICE BUS NAMESPACE CONNECTION STRING>
připojovací řetězec oborem názvů služby Service Bus.Nahraďte
<TOPIC NAME>
názvem tématu.Potom spusťte příkaz v příkazovém řádku, který spustí tento soubor.
node sendtotopic.js
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
.
Otevřete oblíbený editor, například Visual Studio Code.
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); });
Nahraďte
<SERVICE BUS NAMESPACE CONNECTION STRING>
připojovací řetězec do oboru názvů.Nahraďte
<TOPIC NAME>
názvem tématu.Nahraďte
<SUBSCRIPTION NAME>
názvem předplatného tématu.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.
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.
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.
Ř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 login
pří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: