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-üzenetkezelési entitások Azure-ban való használatához hozzon létre egy névteret az Azure-ban egyedi névvel. A névtér egy hatókör-tárolót biztosít a Service Bus-erőforrásokhoz, például az üzenetsorokhoz és a témakörökhöz az alkalmazásban.

Névtér létrehozása:

  1. Jelentkezzen be az Azure Portalra.

  2. Válassza ki a bal felső menüt, és 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.

  4. Görgessen le az Üzenetkezelési szolgáltatások>Service Bushoz , és válassza a Létrehozás lehetőséget.

    Képernyőkép az Erőforrás létrehozása, az Integráció, majd a Service Bus lehetőség kiválasztásáról a menüben.

  5. A Névtér létrehozása lap Alapismeretek lapján 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, vagy hozzon létre egy újat.

    3. Adjon meg egy névtérnevet , amely megfelel 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 végződik a következővel -sb : vagy -mgmt.
    4. A Hely területen válassza ki azt a régiót, amely a névteret üzemelteti.

    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.

      Ha a Prémium szintet választja, engedélyezheti a georeplikálást a névtérhez. A georeplikációs funkció biztosítja, hogy a névtér metaadatai és adatai folyamatosan replikálódjanak egy elsődleges régióból egy vagy több másodlagos régióba.

      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 és 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ókért lásd a Service Bus prémium szintű üzenetkezelési szintjét.

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

      Képernyőkép a Névtér létrehozása lapról

    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.

  6. 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.

    Képernyőkép a sikeresen üzembe helyezett oldalról az Erőforráshoz ugrás hivatkozással.

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

    Képernyőkép a létrehozott Service Bus-névtér kezdőlapjáról.

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

  1. A Service Bus Névtér lapján bontsa ki a bal oldali navigációs menü Entitások elemét, és 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.

    Képernyőkép a Témakör létrehozása lapról az Azure Portalon.

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

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

    Képernyőkép a témakör kiválasztásáról 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.

    Képernyőkép az Előfizetés hozzáadása gombról a Témakör lapon.

  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. Ezután válassza a Létrehozás lehetőséget az előfizetés létrehozásához.

      Képernyőkép az Előfizetés létrehozása lapról.

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

Ez a cikk az Azure Service Bushoz való csatlakozás két módját mutatja be: a jelszó nélküli és a kapcsolati sztringet.

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ódjában, a konfigurációs fájlban vagy egy biztonságos tárolóban, mint például az Azure Key Vaultban, van egy rögzített kapcsolati karakterlánc.

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ó: Service Bus-hitelesítés és -engedélyezés. A jelszó nélküli hitelesítésről a .NET-alkalmazások hitelesítése című témakörben 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 van az Azure Service Bus adattulajdonosi szerepkörére. A szerepkör hozzárendeléséhez szükség van 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. A szerepkör-hozzárendelések elérhető hatóköreinek további megismeréséhez tekintse meg az Azure RBAC hatókörének ismertetése című témakört.

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 helyzetben kövesse a legkisebb jogosultság elvét, hogy a felhasználóknak csak a szükséges minimális engedélyeket adja meg a biztonságosabb éles környezet érdekében.

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 a következő 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 való adathozzáférést, beleértve az üzenetsorokat, témaköröket, előfizetéseket és szűrőket. 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 biztosíthat a send Service Bus-névtérhez és annak entitásaihoz.
  • Azure Service Bus-adat fogadó: Ezzel a szerepkörrel hozzáférést biztosíthat a receive 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. Ez a konfiguráció 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. Üzeneteket fogadhat egy üzenetsorból vagy egy témakör előfizetéséből.

Fontos

A szerepkör-hozzárendelés propagálása a legtöbb esetben egy-két percet vesz igénybe az Azure-ban. 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 Névtér lapját 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és 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.

    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: