Megosztás a következőn keresztül:


Üzenetek küldése egy Azure Service Bus-témakörbe, és üzenetek fogadása előfizetésekből a témakörbe (Python)

Az oktatóanyagban az alábbi lépéseket fogja végrehajtani:

  1. Service Bus-névtér létrehozása az Azure Portal használatával.
  2. Service Bus-üzenettéma létrehozása az Azure Portal használatával.
  3. Service Bus-előfizetés létrehozása az üzenettémához az Azure Portal használatával.
  4. Írjon egy Python-alkalmazást az azure-servicebus csomag használatához a következőre:
    • Üzenetkészlet küldése a témakörbe.
    • Fogadja ezeket az üzeneteket az előfizetésből.

Feljegyzés

Ez a rövid útmutató részletes útmutatást nyújt egy egyszerű forgatókönyvhöz, amely során üzeneteket küldünk egy Service Bus-témakörbe, és fogadjuk ezeket az üzeneteket a témakör egy előfizetéséből. Az Azure Service Bus előre elkészített Python-mintáit a GitHub Azure SDK for Python-adattárában találja.

Előfeltételek

Feljegyzés

Ez az oktatóanyag olyan mintákkal működik, amelyeket a Python használatával másolhat és futtathat. A Python-alkalmazások létrehozásával kapcsolatos utasításokért lásd : Python-alkalmazás létrehozása és üzembe helyezése egy Azure-webhelyen. Az oktatóanyagban használt csomagok telepítésével kapcsolatos további információkért tekintse meg a Python telepítési útmutatóját.

Névtér létrehozása az Azure Portalon

A Service Bus-üzenetküldési entitások Azure-ban való használatának megkezdéséhez először létre kell hoznia egy, az Azure-ban egyedi névvel rendelkező névteret. A névtér egy hatókör-tárolót biztosít a Service Bus-erőforrásokhoz (üzenetsorokhoz, témakörökhöz stb.) az alkalmazásban.

Névtér létrehozása:

  1. Jelentkezzen be az Azure Portalra.

  2. Lépjen a Minden szolgáltatás lapra.

  3. A bal oldali navigációs sávon válassza az Integráció lehetőséget a kategóriák listájából, vigye az egérmutatót a Service Bus fölé, majd válassza a + Service Bus csempén található gombot.

    A menüben az Erőforrás létrehozása, az Integráció, majd a Service Bus kijelölése látható.

  4. A Névtér létrehozása lap Alapszintű címkéjében kövesse az alábbi lépéseket:

    1. Előfizetés esetén válassza ki azt az Azure-előfizetést, amelyben létre szeretné hozni a névteret.

    2. Erőforráscsoport esetén válasszon ki egy meglévő erőforráscsoportot, amelyben a névtér él, vagy hozzon létre egy újat.

    3. Adja meg a névtér nevét. A névtér nevének meg kell felelnie a következő elnevezési konvencióknak:

      • A névnek egyedinek kell lennie az Azure-ban. A rendszer azonnal ellenőrzi, hogy a név elérhető-e.
      • A név hossza legalább 6 és legfeljebb 50 karakter lehet.
      • A név csak betűket, számokat, "-" kötőjeleket tartalmazhat.
      • A névnek betűvel kell kezdődnie, és betűvel vagy számmal kell végződnie.
      • A név nem "-sb" vagy "-mgmt" végződésű.
    4. A Hely területen válassza ki azt a régiót, amelyben a névteret üzemeltetni kell.

    5. Tarifacsomag esetén válassza ki a névtérhez tartozó tarifacsomagot (Alapszintű, Standard vagy Prémium). Ebben a rövid útmutatóban válassza a Standard lehetőséget.

      Fontos

      Ha témaköröket és előfizetéseket szeretne használni, válassza a Standard vagy a Premium lehetőséget. Az alapszintű tarifacsomag nem támogatja a témaköröket/előfizetéseket.

      Ha a Prémium tarifacsomagot választotta, adja meg az üzenetkezelési egységek számát. A prémium szint erőforrás-elkülönítést biztosít a CPU és a memória szintjén, így minden számítási feladat külön fut. Ennek az erőforrás-tárolónak a neve üzenetkezelési egység. A prémium szintű névtér legalább egy üzenetkezelési egységgel rendelkezik. Minden Service Bus Premium-névtérhez választhat 1, 2, 4, 8 vagy 16 üzenetkezelési egységet. További információ: Service Bus Premium Messaging.

    6. Válassza a Véleményezés + létrehozás lehetőséget a lap alján.

      A Névtér létrehozása lap képe

    7. A Véleményezés + létrehozás lapon tekintse át a beállításokat, és válassza a Létrehozás lehetőséget.

  5. Miután az erőforrás üzembe helyezése sikeres volt, válassza az Erőforrás megnyitása lehetőséget az üzembe helyezési lapon.

    Az üzembe helyezés sikerességét bemutató kép az Erőforrás megnyitása hivatkozással.

  6. Megjelenik a service bus-névtér kezdőlapja.

    A létrehozott Service Bus-névtér kezdőlapját ábrázoló kép.

Üzenettéma létrehozása az Azure Portal használatával

  1. A Service Bus Namespace lapon válassza a bal oldali menü Témakörök elemét .

  2. Válassza a + Témakör lehetőséget az eszköztáron.

  3. Adja meg a témakör nevét. A többi beállítást hagyja az alapértelmezett értékükön.

  4. Válassza a Létrehozás lehetőséget.

    A Témakör létrehozása lapot ábrázoló kép.

Előfizetés létrehozása az üzenettémához

  1. Válassza ki az előző szakaszban létrehozott témakört .

    A témakör kiválasztását ábrázoló kép a témakörök listájából.

  2. A Service Bus-témakör lapján válassza az eszköztár + Előfizetés lehetőséget.

    Az Előfizetés hozzáadása gombot ábrázoló kép.

  3. Az Előfizetés létrehozása lapon kövesse az alábbi lépéseket:

    1. Írja be az S1 nevet az előfizetéshez.

    2. Adja meg a 3 értéket a maximális szállítási számhoz.

    3. Ezután válassza a Létrehozás lehetőséget az előfizetés létrehozásához.

      Az előfizetés létrehozása lapot ábrázoló kép.

Az alkalmazás hitelesítése az Azure-ban

Ez a rövid útmutató az Azure Service Bushoz való csatlakozás két módját mutatja be: jelszó nélküli és kapcsolati sztring.

Az első lehetőség bemutatja, hogyan használhatja a biztonsági tagot a Microsoft Entra-azonosítóban és a szerepköralapú hozzáférés-vezérlésben (RBAC) a Service Bus-névtérhez való csatlakozáshoz. Nem kell aggódnia amiatt, hogy a kódban, a konfigurációs fájlban vagy egy biztonságos tárolóban, például az Azure Key Vaultban keményen kódolt kapcsolati sztring kell lennie.

A második lehetőség bemutatja, hogyan csatlakozhat egy Service Bus-névtérhez egy kapcsolati sztring. Ha még nem ismerkedik az Azure-sal, könnyebben követheti a kapcsolati sztring lehetőséget. A jelszó nélküli beállítást a valós alkalmazásokban és éles környezetekben javasoljuk. További információ: Hitelesítés és engedélyezés. A jelszó nélküli hitelesítésről az áttekintési oldalon olvashat bővebben.

Szerepkörök hozzárendelése a Microsoft Entra-felhasználóhoz

Helyi fejlesztéskor győződjön meg arról, hogy az Azure Service Bushoz csatlakozó felhasználói fiók rendelkezik a megfelelő engedélyekkel. Az üzenetek küldéséhez és fogadásához szüksége lesz az Azure Service Bus adattulajdonosi szerepkörére. A szerepkör hozzárendeléséhez szüksége lesz a felhasználói hozzáférés-rendszergazdai szerepkörre, vagy egy másik szerepkörre, amely tartalmazza a Microsoft.Authorization/roleAssignments/write műveletet. Azure RBAC-szerepköröket rendelhet egy felhasználóhoz az Azure Portal, az Azure CLI vagy az Azure PowerShell használatával. További információ a szerepkör-hozzárendelések elérhető hatóköreiről a hatókör áttekintési oldalán.

Az alábbi példa hozzárendeli a szerepkört a Azure Service Bus Data Owner felhasználói fiókjához, amely teljes hozzáférést biztosít az Azure Service Bus-erőforrásokhoz. Egy valós forgatókönyvben kövesse a Minimális jogosultság elvét, hogy a felhasználók csak a biztonságosabb éles környezethez szükséges minimális engedélyeket adják meg a felhasználóknak.

Azure beépített szerepkörök az Azure Service Bushoz

Az Azure Service Bus esetében a névterek és az összes kapcsolódó erőforrás kezelése az Azure Portalon és az Azure Resource Management API-val már védett az Azure RBAC-modell használatával. Az Azure az alábbi beépített Azure-szerepköröket biztosítja a Service Bus-névtérhez való hozzáférés engedélyezéséhez:

  • Azure Service Bus-adattulajdonos: Lehetővé teszi a Service Bus-névtérhez és annak entitásaihoz (üzenetsorokhoz, témakörökhöz, előfizetésekhez és szűrőkhöz) való adathozzáférést. A szerepkör egy tagja üzeneteket küldhet és fogadhat üzenetsorokból vagy témakörökből/előfizetésekből.
  • Azure Service Bus-adatküldő: Ezzel a szerepkörrel hozzáférést adhat a Service Bus-névtérhez és annak entitásaihoz.
  • Azure Service Bus-adatfogadó: Ezzel a szerepkörrel hozzáférést adhat a Service Bus-névtérhez és annak entitásaihoz.

Ha egyéni szerepkört szeretne létrehozni, tekintse meg a Service Bus-műveletekhez szükséges jogosultságokat.

Microsoft Entra-felhasználó hozzáadása az Azure Service Bus tulajdonosi szerepköréhez

Adja hozzá a Microsoft Entra-felhasználónevet az Azure Service Bus-adattulajdonosi szerepkörhöz a Service Bus névtér szintjén. Lehetővé teszi, hogy a felhasználói fiók környezetében futó alkalmazások üzeneteket küldjenek egy üzenetsorba vagy egy témakörbe, és üzeneteket fogadhassanak egy üzenetsorból vagy egy témakör előfizetéséből.

Fontos

A legtöbb esetben egy-két percig tart, amíg a szerepkör-hozzárendelés propagálása az Azure-ban megtörténik. Ritkán akár nyolc percig is eltarthat. Ha hitelesítési hibákat kap a kód első futtatásakor, várjon néhány percet, és próbálkozzon újra.

  1. Ha nem nyitotta meg a Service Bus Namespace lapot az Azure Portalon, keresse meg a Service Bus-névteret a fő keresősávon vagy a bal oldali navigációs sávon.

  2. Az áttekintési lapon válassza a Hozzáférés-vezérlés (IAM) lehetőséget a bal oldali menüben.

  3. A Hozzáférés-vezérlés (IAM) lapon válassza a Szerepkör-hozzárendelések lapot.

  4. Válassza a +Hozzáadás lehetőséget a felső menüből, majd a szerepkör-hozzárendelés hozzáadása lehetőséget az eredményül kapott legördülő menüből.

    Képernyőkép egy szerepkör hozzárendeléséről.

  5. A keresőmezővel szűrheti az eredményeket a kívánt szerepkörre. Ebben a példában keresse meg Azure Service Bus Data Owner és válassza ki az egyező eredményt. Ezután válassza a Tovább gombot.

  6. A Hozzáférés hozzárendelése területen válassza a Felhasználó, csoport vagy szolgáltatásnév lehetőséget, majd válassza a + Tagok kijelölése lehetőséget.

  7. A párbeszédpanelen keresse meg a Microsoft Entra-felhasználónevet (általában a user@domain e-mail-címét), majd válassza a Párbeszédpanel alján található Kiválasztás lehetőséget.

  8. Válassza a Véleményezés + hozzárendelés lehetőséget a végső lapra való ugráshoz, majd a folyamat befejezéséhez a Véleményezés + hozzárendelés lehetőséget.

Kód beállítása

Ezt a rövid útmutatót jelszó nélküli hitelesítéssel és saját Azure-fiókjával követheti:

  • Telepítse az Azure CLI-t.
  • Jelentkezzen be azure-fiókjával a terminálon vagy a parancssorban a következővel az login: .
  • Használja ugyanazt a fiókot, amikor az oktatóanyag későbbi részében hozzáadja a megfelelő szerepkört az erőforráshoz.
  • Futtassa az oktatóanyag kódját ugyanabban a terminálban vagy parancssorban.

Fontos

Győződjön meg arról, hogy bejelentkezik.az login A DefaultAzureCredential jelszó nélküli kód osztálya az Azure CLI hitelesítő adatait használja a Microsoft Entra-azonosítóval való hitelesítéshez.

A jelszó nélküli kód használatához meg kell adnia a következőket:

  • teljes mértékben minősített service bus névtér, például: <service-bus-namespace.servicebus.windows.net>
  • témakör neve
  • előfizetés neve

Csomagok telepítése pip használatával

  1. A Service Bus-oktatóanyaghoz szükséges Python-csomagok telepítéséhez nyisson meg egy parancssort, amelyben a Python szerepel. Módosítsa a könyvtárat arra a mappára, ahol a mintákat szeretné használni.

  2. Csomagok telepítése:

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

Üzenetek küldése egy üzenettémakörbe

Az alábbi mintakód bemutatja, hogyan küldhet üzeneteket egy Service Bus-témakörbe. Részletekért lásd a kód megjegyzéseit.

Nyissa meg a kedvenc szerkesztőt, például a Visual Studio Code-ot, hozzon létre egy fájl send.py, és adja hozzá a következő kódot.

  1. Adja hozzá a következő import-utasításokat.

    import asyncio
    from azure.servicebus.aio import ServiceBusClient
    from azure.servicebus import ServiceBusMessage
    from azure.identity.aio import DefaultAzureCredential
    
  2. Adja hozzá az állandókat, és definiáljon egy hitelesítő adatot.

    FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
    TOPIC_NAME = "TOPIC_NAME"
    
    credential = DefaultAzureCredential()
    

    Fontos

    • Cserélje le FULLY_QUALIFIED_NAMESPACE a Service Bus-névtér teljes névterére.
    • Cserélje le TOPIC_NAME a témakör nevére.

    Az előző kódban az Azure Identity ügyfélkódtár osztályát DefaultAzureCredential használta. Amikor az alkalmazás helyileg fut a fejlesztés során, DefaultAzureCredential automatikusan felderíti és hitelesíti az Azure-t azzal a fiókkal, amellyel bejelentkezett az Azure CLI-be. Az alkalmazás Azure-ban DefaultAzureCredential való üzembe helyezésekor kódmódosítások nélkül hitelesítheti az alkalmazást a Microsoft Entra-azonosítón keresztül egy felügyelt identitáson keresztül.

  3. Adjon hozzá egy metódust egyetlen üzenet küldéséhez.

    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")
    

    A feladó egy olyan objektum, amely ügyfélként működik a létrehozott témakörhöz. Később létre fogja hozni, és argumentumként elküldi ezt a függvényt.

  4. Adjon hozzá egy metódust az üzenetek listájának küldéséhez.

    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")
    
  5. Adjon hozzá egy metódust egy üzenetköteg küldéséhez.

    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")
    
  6. Hozzon létre egy Service Bus-ügyfelet, majd egy témakör feladó objektumot az üzenetek küldéséhez.

    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("-----------------------")
    

Üzenetek fogadása előfizetésből

Az alábbi mintakód bemutatja, hogyan fogadhat üzeneteket egy előfizetésből. Ez a kód folyamatosan fogad új üzeneteket, amíg nem kap új üzeneteket 5 (max_wait_time) másodpercig.

Nyissa meg a kedvenc szerkesztőt, például a Visual Studio Code-ot, hozzon létre egy fájlt recv.py, és adja hozzá a következő kódot.

  1. A küldési mintához hasonlóan adjon hozzá import utasításokat, határozzon meg állandókat, amelyeket a saját értékeire kell cserélnie, és definiáljon egy hitelesítő adatot.

    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()
    
  2. Hozzon létre egy Service Bus-ügyfelet, majd egy előfizetés-fogadó objektumot az üzenetek fogadásához.

    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()
    
  3. Hívja meg a metódust run .

    asyncio.run(run())
    

Az alkalmazás futtatása

Nyisson meg egy parancssort, amelyben a Python szerepel, majd futtassa a kódot egy előfizetés üzeneteinek küldéséhez és fogadásához egy témakör alatt.

python send.py; python recv.py

A következő kimenetnek kell megjelennie:

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

Az Azure Portalon keresse meg a Service Bus-névteret. Az Áttekintés lapon ellenőrizze, hogy a bejövő és kimenő üzenetek száma 16- e. Ha nem látja a számokat, néhány perc várakozás után frissítse a lapot.

Bejövő és kimenő üzenetek száma

Válassza ki a témakört az alsó panelen a témakör Service Bus-témakör lapjának megtekintéséhez. Ezen a lapon három bejövő és három kimenő üzenetnek kell megjelennie az Üzenetek diagramon.

Bejövő és kimenő üzenetek

Ezen a lapon, ha kiválaszt egy előfizetést, megjelenik a Service Bus-előfizetés lap. Ezen a lapon láthatja az aktív üzenetek számát, a kézbesíthetetlen üzenetek számát és egyebeket. Ebben a példában az összes üzenet megérkezett, így az aktív üzenetek száma nulla.

Aktív üzenetek száma

Ha megjegyzést fűz a fogadási kódhoz, az aktív üzenetek száma 16 lesz.

Aktív üzenetek száma – nincs fogadás

Következő lépések

Tekintse meg a következő dokumentációt és mintákat: