Ü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:
- Service Bus-névtér létrehozása az Azure Portal használatával.
- Service Bus-üzenettéma létrehozása az Azure Portal használatával.
- Service Bus-előfizetés létrehozása az üzenettémához az Azure Portal használatával.
- Í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
- Egy Azure-előfizetés.
- Python 3.8 vagy újabb
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:
Jelentkezzen be az Azure Portalra.
Lépjen a Minden szolgáltatás lapra.
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 Névtér létrehozása lap Alapszintű címkéjében kövesse az alábbi lépéseket:
Előfizetés esetén válassza ki azt az Azure-előfizetést, amelyben létre szeretné hozni a névteret.
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.
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ű.
A Hely területen válassza ki azt a régiót, amelyben a névteret üzemeltetni kell.
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.
Válassza a Véleményezés + létrehozás lehetőséget a lap alján.
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.
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.
Megjelenik a service bus-névtér kezdőlapja.
Üzenettéma létrehozása az Azure Portal használatával
A Service Bus Namespace lapon válassza a bal oldali menü Témakörök elemét .
Válassza a + Témakör lehetőséget az eszköztáron.
Adja meg a témakör nevét. A többi beállítást hagyja az alapértelmezett értékükön.
Válassza a Létrehozás lehetőséget.
Előfizetés létrehozása az üzenettémához
Válassza ki az előző szakaszban létrehozott témakört .
A Service Bus-témakör lapján válassza az eszköztár + Előfizetés lehetőséget.
Az Előfizetés létrehozása lapon kövesse az alábbi lépéseket:
Írja be az S1 nevet az előfizetéshez.
Adja meg a 3 értéket a maximális szállítási számhoz.
Ezután válassza a Létrehozás lehetőséget az előfizetés létrehozásához.
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.
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.
Az áttekintési lapon válassza a Hozzáférés-vezérlés (IAM) lehetőséget a bal oldali menüben.
A Hozzáférés-vezérlés (IAM) lapon válassza a Szerepkör-hozzárendelések lapot.
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.
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.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.
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.
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
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.
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.
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
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-banDefaultAzureCredential
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.- Cserélje le
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.
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")
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")
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.
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()
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()
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.
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.
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.
Ha megjegyzést fűz a fogadási kódhoz, az aktív üzenetek száma 16 lesz.
Következő lépések
Tekintse meg a következő dokumentációt és mintákat:
- Azure Service Bus-ügyfélkódtár Pythonhoz
- Minták.
- A sync_samples mappában olyan minták találhatók, amelyek bemutatják, hogyan használhatja szinkron módon a Service Bus szolgáltatást. Ebben a rövid útmutatóban ezt a módszert használta.
- A async_samples mappában olyan minták találhatók, amelyek bemutatják, hogyan használhatja a Service Bust aszinkron módon.
- az azure-servicebus referenciadokumentációja