Sdílet prostřednictvím


Rychlý start: Odesílání zpráv do front Azure Service Bus a příjem zpráv z front Azure Service Bus (Python)

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

V tomto rychlém průvodci vám:

  • Pomocí webu Azure Portal vytvoříme obor názvů služby Service Bus.

  • Pomocí webu Azure Portal vytvoříme frontu služby Service Bus.

  • Napište kód Pythonu pro použití balíčku azure-servicebus pro:

    • Odešlete do fronty sadu zpráv.
    • Tyto zprávy obdržíte z fronty.

Pokud s službou teprve začínáte, podívejte se na přehled služby Service Bus , než začnete.

Požadavky

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

  • 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 váš obor názvů služby Service Bus. Potřebujete to v kódu.

Tento rychlý start 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 Rychlý start: Nasazení webové aplikace v Pythonu do služby Azure App Service. Další informace o instalaci balíčků použitých v tomto rychlém startu najdete v tématu Postup instalace balíčků knihovny Azure pro Python.

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í fronty na webu Azure Portal

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

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

  3. Zadejte název fronty. U ostatních hodnot ponechte výchozí hodnoty.

  4. Vyberte Vytvořit.

    Snímek obrazovky se stránkou Vytvořit frontu

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íčků pomocí pipu

  1. Pokud chcete nainstalovat požadované balíčky Pythonu pro tento rychlý start služby Service Bus, otevřete okno příkazového řádku, které má Python v cestě.

  2. Změňte adresář na složku, do které chcete mít ukázky.

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

    pip install azure-servicebus
    pip install azure-identity
    pip install aiohttp
    

Zasílání zpráv do fronty

Následující ukázkový kód ukazuje, jak odeslat zprávu do fronty. Otevřete textový editor, například Visual Studio Code, vytvořte soubor send.py a přidejte do něj následující kód.

  1. Přidat příkazy importu

    import asyncio
    from azure.servicebus.aio import ServiceBusClient
    from azure.servicebus import ServiceBusMessage
    from azure.identity.aio import DefaultAzureCredential
    
  2. Přidejte konstanty a definujte přihlašovací údaje.

    FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
    QUEUE_NAME = "QUEUE_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 QUEUE_NAME názvem fronty.
  3. Přidejte metodu pro odeslání jedné zprávy.

    async def send_single_message(sender):
        # Create a Service Bus message and send it to the queue
        message = ServiceBusMessage("Single Message")
        await sender.send_messages(message)
        print("Sent a single message")
    

    Odesílatel je objekt, který funguje jako klient fronty, kterou jste vytvořili. Později ho vytvoříte a odešlete jako argument této funkci.

  4. Přidejte metodu pro odeslání seznamu zpráv.

    async def send_a_list_of_messages(sender):
        # Create a list of messages and send it to the queue
        messages = [ServiceBusMessage("Message in list") for _ in range(5)]
        await sender.send_messages(messages)
        print("Sent a list of 5 messages")
    
  5. 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 queue
            await sender.send_messages(batch_message)
        print("Sent a batch of 10 messages")
    
  6. Vytvořte klienta služby Service Bus a objekt odesílatele fronty 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 Queue Sender object to send messages to the queue
            sender = servicebus_client.get_queue_sender(queue_name=QUEUE_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()
    
  7. Zavolejte metodu run a vytiskněte zprávu.

    asyncio.run(run())
    print("Done sending messages")
    print("-----------------------")
    

Příjem zpráv z fronty

Následující ukázkový kód ukazuje, jak přijímat zprávy z fronty. Zobrazený kód obdrží nové zprávy, dokud neobdrží žádné nové zprávy po dobu 5 (max_wait_time) sekund.

Otevřete textový editor, například Visual Studio Code, vytvořte soubor recv.py a přidejte do něj následující kód.

  1. Podobně jako v ukázce send.py přidejte import příkazy. Konstanty nahraďte 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"
    QUEUE_NAME = "QUEUE_NAME"
    
    credential = DefaultAzureCredential()
    
  2. Vytvořte klienta služby Service Bus a objekt příjemce fronty pro příjem zpráv.

    async def run():
        # create a Service Bus client using the connection string
        async with ServiceBusClient(
            fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
            credential=credential,
            logging_enable=True) as servicebus_client:
    
            async with servicebus_client:
                # get the Queue Receiver object for the queue
                receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME)
                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 queue
                        await receiver.complete_message(msg)
    
            # Close credential when no longer needed.
            await credential.close()
    
  3. 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 z fronty.

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, počkejte několik minut a pak stránku aktualizujte.

Počet příchozích a odchozích zpráv

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 můžete také zobrazit počet příchozích a odchozích zpráv. Zobrazí se také další informace, jako je aktuální velikost fronty a počet aktivních zpráv.

Podrobnosti o frontě

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