Odesílání zpráv do tématu služby Azure Service Bus a příjem zpráv z odběrů do tématu (Python)
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 aplikaci Pythonu pro použití balíčku azure-servicebus k:
- 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ředdefinované ukázky Pythonu pro Azure Service Bus najdete v úložišti Azure SDK pro Python na GitHubu.
Požadavky
- Předplatné Azure
- Python 3.8 nebo novější
Poznámka:
Tento kurz funguje s ukázkami, které můžete kopírovat a spouštět pomocí Pythonu. Pokyny k vytvoření aplikace v Pythonu najdete v tématu Vytvoření a nasazení aplikace v Pythonu na web Azure. Další informace o instalaci balíčků použitých v tomto kurzu najdete v průvodci instalací Pythonu.
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 .
Nastavení kódu
Pokud chcete postupovat podle tohoto rychlého startu pomocí ověřování bez hesla a vlastního účtu Azure:
- Nainstalujte rozhraní příkazového řádku Azure CLI.
- 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 později v tomto kurzu.
- Spusťte kód kurzu ve stejném terminálu nebo příkazovém řádku.
Důležité
Ujistěte se, že se přihlašujete pomocí az login
. Třída DefaultAzureCredential
v kódu bez hesla používá přihlašovací údaje Azure CLI k ověření pomocí Microsoft Entra ID.
Pokud chcete použít kód bez hesla, budete muset zadat:
- plně kvalifikovaný obor názvů služby Service Bus, například service-bus-namespace.servicebus.windows.net <>
- název tématu
- název předplatného
Instalace balíčků pomocí pipu
Pokud chcete nainstalovat požadované balíčky Pythonu pro tento kurz služby Service Bus, otevřete příkazový řádek, který má Python v cestě. Změňte adresář na složku, do které chcete mít ukázky.
Instalační balíčky:
pip install azure-servicebus pip install azure-identity pip install aiohttp
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.
Otevřete oblíbený editor, například Visual Studio Code, vytvořte soubor send.py a přidejte do něj následující kód.
Přidejte následující příkazy
import
.import asyncio from azure.servicebus.aio import ServiceBusClient from azure.servicebus import ServiceBusMessage from azure.identity.aio import DefaultAzureCredential
Přidejte konstanty a definujte přihlašovací údaje.
FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" TOPIC_NAME = "TOPIC_NAME" credential = DefaultAzureCredential()
Důležité
- Nahraďte
FULLY_QUALIFIED_NAMESPACE
plně kvalifikovaný obor názvů pro váš obor názvů služby Service Bus. - Nahraďte
TOPIC_NAME
názvem tématu.
V předchozím kódu jste použili třídu klientské knihovny
DefaultAzureCredential
Azure Identity. Když se aplikace spustí místně během vývoje, automaticky zjistí a ověří v Azure pomocí účtu,DefaultAzureCredential
kterým jste se přihlásili do Azure CLI. Když je aplikace nasazená do Azure,DefaultAzureCredential
může aplikaci ověřit v Microsoft Entra ID prostřednictvím spravované identity bez jakýchkoli změn kódu.- Nahraďte
Přidejte metodu pro odeslání jedné zprávy.
async def send_single_message(sender): # Create a Service Bus message message = ServiceBusMessage("Single Message") # send the message to the topic await sender.send_messages(message) print("Sent a single message")
Odesílatel je objekt, který funguje jako klient tématu, které jste vytvořili. Později ji vytvoříte a odešlete ji jako argument této funkci.
Přidejte metodu pro odeslání seznamu zpráv.
async def send_a_list_of_messages(sender): # Create a list of messages messages = [ServiceBusMessage("Message in list") for _ in range(5)] # send the list of messages to the topic await sender.send_messages(messages) print("Sent a list of 5 messages")
Přidejte metodu pro odeslání dávky zpráv.
async def send_batch_message(sender): # Create a batch of messages async with sender: batch_message = await sender.create_message_batch() for _ in range(10): try: # Add a message to the batch batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch")) except ValueError: # ServiceBusMessageBatch object reaches max_size. # New ServiceBusMessageBatch object can be created here to send more data. break # Send the batch of messages to the topic await sender.send_messages(batch_message) print("Sent a batch of 10 messages")
Vytvořte klienta služby Service Bus a pak objekt odesílatele tématu pro odesílání zpráv.
async def run(): # create a Service Bus client using the credential. async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: # Get a Topic Sender object to send messages to the topic sender = servicebus_client.get_topic_sender(topic_name=TOPIC_NAME) async with sender: # Send one message await send_single_message(sender) # Send a list of messages await send_a_list_of_messages(sender) # Send a batch of messages await send_batch_message(sender) # Close credential when no longer needed. await credential.close() asyncio.run(run()) print("Done sending messages") print("-----------------------")
Příjem zpráv z odběru
Následující ukázkový kód ukazuje, jak přijímat zprávy z odběru. Tento kód průběžně přijímá nové zprávy, dokud neobdrží žádné nové zprávy po dobu 5 (max_wait_time
) sekund.
Otevřete oblíbený editor, například Visual Studio Code, vytvořte soubor recv.py a přidejte do něj následující kód.
Podobně jako v ukázce pro odesílání přidejte
import
příkazy, definujte konstanty, které byste měli nahradit vlastními hodnotami, a definujte přihlašovací údaje.import asyncio from azure.servicebus.aio import ServiceBusClient from azure.identity.aio import DefaultAzureCredential FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" SUBSCRIPTION_NAME = "SUBSCRIPTION_NAME" TOPIC_NAME = "TOPIC_NAME" credential = DefaultAzureCredential()
Vytvořte klienta služby Service Bus a pak objekt příjemce odběru pro příjem zpráv.
async def run(): # create a Service Bus client using the credential async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: async with servicebus_client: # get the Subscription Receiver object for the subscription receiver = servicebus_client.get_subscription_receiver(topic_name=TOPIC_NAME, subscription_name=SUBSCRIPTION_NAME, max_wait_time=5) async with receiver: received_msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20) for msg in received_msgs: print("Received: " + str(msg)) # complete the message so that the message is removed from the subscription await receiver.complete_message(msg) # Close credential when no longer needed. await credential.close()
Zavolejte metodu
run
.asyncio.run(run())
Spustit aplikaci
Otevřete příkazový řádek, který má Python v cestě, a spusťte kód pro odesílání a příjem zpráv pro odběr v rámci tématu.
python send.py; python recv.py
Měl by se zobrazit následující výstup:
Sent a single message
Sent a list of 5 messages
Sent a batch of 10 messages
Done sending messages
-----------------------
Received: Single Message
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Na webu Azure Portal přejděte do svého oboru názvů služby Service Bus. Na stránce Přehled ověřte, že počet příchozích a odchozích zpráv je 16. Pokud počet nevidíte, aktualizujte stránku po čekání na několik minut.
Výběrem tématu v dolním podokně zobrazíte stránku téma služby Service Bus pro vaše téma. Na této stránce byste měli vidět tři příchozí a tři odchozí zprávy v grafu Zprávy .
Pokud na této stránce vyberete předplatné, 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 byly přijaty všechny zprávy, takže počet aktivních zpráv je nula.
Pokud zakomentujete kód příjmu, zobrazí se počet aktivních zpráv jako 16.
Další kroky
Projděte si následující dokumentaci a ukázky:
- Klientská knihovna služby Azure Service Bus pro Python
- Ukázky.
- Složka sync_samples obsahuje ukázky, které ukazují, jak pracovat se službou Service Bus synchronním způsobem. V tomto rychlém startu jste použili tuto metodu.
- Složka async_samples obsahuje ukázky, které ukazují, jak pracovat se službou Service Bus asynchronním způsobem.
- Referenční dokumentace ke službě azure-servicebus