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


Rövid útmutató: Üzenetek küldése és fogadása az Azure Service Bus-üzenetsorokból (Python)

Ez a cikk részletes útmutatást nyújt az üzenetek Service Bus-üzenetsorba való küldésének és fogadásának egyszerű forgatókönyvéhez. Az Azure Service Bus előre összeállított JavaScript- és TypeScript-mintáit a GitHub Azure SDK for Python-adattárában találja.

Ebben a gyors kezdő útmutatóban a következőket teheti meg:

  • Service Bus-névtér létrehozása az Azure Portal használatával.

  • Service Bus-üzenetsor létrehozása az Azure Portal használatával.

  • Python-kódot írni az azure-servicebus csomag használatával a következőkre:

    • Üzenetkészlet küldése az üzenetsorba.
    • Fogadja ezeket az üzeneteket az üzenetsorból.

Ha még nem ismerkedik a szolgáltatással, a kezdés előtt tekintse meg a Service Bus áttekintését .

Előfeltételek

Ha ezt a rövid útmutatót saját Azure-fiókjával szeretné használni:

  • Telepítse az Azure CLI-t, amely jelszó nélküli hitelesítést biztosít a fejlesztői gép számára.
  • 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 hozzáadja a megfelelő adatszerepkört az erőforráshoz.
  • Futtassa a kódot ugyanabban a terminálban vagy parancssorban.
  • Jegyezze fel a Service Bus-névtér üzenetsornevét . Erre szükség van a kódban.

Ez a rövid útmutató 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 : Rövid útmutató: Python-webalkalmazás üzembe helyezése az Azure App Service-ben. Az ebben a rövid útmutatóban használt csomagok telepítéséről további információt a Pythonhoz készült Azure-kódtárcsomagok telepítése című témakörben talál.

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.

Üzenetsor létrehozása az Azure Portalon

  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 az Üzenetsorok lehetőséget.

  2. Az Üzenetsorok lapon, az eszköztáron válassza a + Üzenetsor lehetőséget.

  3. Adjon meg egy nevet a várósornak. Hagyja meg a többi értéket az alapértelmezett értékekkel.

  4. Válassza a Create gombot.

    Képernyőkép az Üzenetsor 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.

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

  1. A Service Bus gyorsútmutatóhoz szükséges Python-csomagok telepítéséhez nyisson meg egy parancssori ablakot, amelyben a Python szerepel.

  2. Módosítsa a könyvtárat arra a mappára, ahol a mintákat szeretné használni.

  3. Telepítse a következő csomagokat:

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

Üzenetek küldése egy üzenetsorba

Az alábbi mintakód bemutatja, hogyan küldhet üzenetet egy üzenetsorba. Nyisson meg egy szövegszerkesztő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. Importálási utasítások hozzáadása.

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

    FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
    QUEUE_NAME = "QUEUE_NAME"
    
    credential = DefaultAzureCredential()
    

    Fontos

    • Cserélje le FULLY_QUALIFIED_NAMESPACE a Service Bus-névtér teljes névterére.
    • Cserélje le QUEUE_NAME az üzenetsor nevére.
  3. Adjon hozzá egy metódust egyetlen üzenet küldéséhez.

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

    A feladó egy olyan objektum, amely ügyfélként működik a létrehozott üzenetsorhoz. Később hozza létre, és argumentumként elküldi ennek a függvénynek.

  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 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. 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 queue
            await sender.send_messages(batch_message)
        print("Sent a batch of 10 messages")
    
  6. Hozzon létre egy Service Bus-ügyfelet, majd egy üzenetsor-küldő 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 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. Hívja meg a metódust run , és nyomtassa ki az üzenetet.

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

Üzenetek fogadása üzenetsorból

Az alábbi mintakód bemutatja, hogyan fogadhat üzeneteket egy üzenetsorból. A megjelenő kód új üzeneteket kap, amíg nem kap új üzeneteket 5 (max_wait_time) másodpercig.

Nyisson meg egy szövegszerkesztőt, például a Visual Studio Code-ot, hozzon létre egy fájl recv.py, és adja hozzá a következő kódot.

  1. A send.py mintához hasonlóan adjon hozzá import utasításokat. Cserélje le az állandókat a saját értékeire, és adjon meg egy hitelesítő adatot.

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

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

    asyncio.run(run())
    

Az alkalmazás futtatása

Nyisson meg egy parancssort, amelyen a Python szerepel, majd futtassa a kódot az üzenetsorból érkező üzenetek küldéséhez és fogadásához.

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, várjon néhány percet, majd frissítse a lapot.

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

Válassza ki az üzenetsort ezen az Áttekintés lapon a Service Bus Üzenetsor lapjára való navigáláshoz. Ezen a lapon a bejövő és kimenő üzenetek száma is látható. Egyéb információkat is láthat, például az üzenetsor aktuális méretét és az aktív üzenetek számát.

Üzenetsor részletei

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