Események küldése és fogadása egy eseményközponton a Python használatával
Ez a rövid útmutató bemutatja, hogyan küldhet eseményeket egy eseményközpontba, és hogyan fogadhat eseményeket az azure-eventhub Python-csomag használatával.
Előfeltételek
Ha még nem ismerkedik az Azure Event Hubs szolgáltatásokkal, a rövid útmutató előtt tekintse meg az Event Hubs áttekintését .
A rövid útmutató elvégzéséhez a következő előfeltételekre van szüksége:
- Microsoft Azure-előfizetés. Az Azure-szolgáltatások, köztük az Azure Event Hubs használatához előfizetésre van szükség. Ha nem rendelkezik meglévő Azure-fiókkal, regisztráljon egy ingyenes próbaverzióra.
- Python 3.8 vagy újabb, pip telepítve és frissítve.
- Visual Studio Code (ajánlott) vagy bármely más integrált fejlesztési környezet (IDE).
- Hozzon létre egy Event Hubs-névteret és egy eseményközpontot. Első lépésként az Azure Portal használatával hozzon létre egy Event Hubs-névteret, és szerezze be azokat a felügyeleti hitelesítő adatokat, amelyeket az alkalmazásnak kommunikálnia kell az eseményközponttal. Névtér és eseményközpont létrehozásához kövesse az ebben a cikkben ismertetett eljárást.
A csomagok telepítése események küldéséhez
Az Event Hubs Python-csomagjainak telepítéséhez nyisson meg egy parancssort, amelyben a Python szerepel az elérési úton. Módosítsa a könyvtárat arra a mappára, ahol meg szeretné tartani a mintákat.
pip install azure-eventhub
pip install azure-identity
pip install aiohttp
Az alkalmazás hitelesítése az Azure-ban
Ez a rövid útmutató az Azure Event Hubshoz való csatlakozás két módját mutatja be: jelszó nélküli és kapcsolati sztring. Az első lehetőség bemutatja, hogyan csatlakozhat egy Event Hubs-névtérhez a Microsoft Entra-azonosítóban és a szerepköralapú hozzáférés-vezérlésben (RBAC). 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 található kapcsolati sztring. A második lehetőség bemutatja, hogyan lehet kapcsolati sztring csatlakozni egy Event Hubs-névtérhez. 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 Event Hubshoz 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 Event Hubs 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 Event Hubs Data Owner
felhasználói fiókjához, amely teljes hozzáférést biztosít az Azure Event Hubs-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 Event Hubshoz
Az Azure Event Hubs 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-modellel. Az Azure az alábbi beépített Azure-szerepköröket biztosítja az Event Hubs-névtérhez való hozzáférés engedélyezéséhez:
- Azure Event Hubs-adattulajdonos: Adathozzáférést tesz lehetővé az Event Hubs-névtérhez és annak entitásaihoz (üzenetsorokhoz, témakörökhöz, előfizetésekhez és szűrőkhöz)
- Azure Event Hubs-adatküldő: Ezzel a szerepkörrel hozzáférést adhat a feladónak az Event Hubs-névtérhez és annak entitásaihoz.
- Azure Event Hubs-adat fogadó: Ezzel a szerepkörrel hozzáférést adhat a fogadónak az Event Hubs-névtérhez és annak entitásaihoz.
Ha egyéni szerepkört szeretne létrehozni, tekintse meg az Event Hubs-műveletekhez szükséges jogosultságokat.
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.
Az Azure Portalon keresse meg az Event Hubs-névteret a fő keresősáv vagy a bal oldali navigációs sáv használatával.
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 Event Hubs 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.
Események küldése
Ebben a szakaszban hozzon létre egy Python-szkriptet, amely eseményeket küld a korábban létrehozott eseményközpontba.
Nyissa meg a kedvenc Python-szerkesztőt, például a Visual Studio Code-ot.
Hozzon létre egy send.py nevű szkriptet. Ez a szkript egy eseményköteget küld a korábban létrehozott eseményközpontnak.
Illessze be a következő kódot a send.py:
A kódban valós értékekkel cserélje le a következő helyőrzőket:
EVENT_HUB_FULLY_QUALIFIED_NAMESPACE
EVENT_HUB_NAME
import asyncio from azure.eventhub import EventData from azure.eventhub.aio import EventHubProducerClient from azure.identity.aio import DefaultAzureCredential EVENT_HUB_FULLY_QUALIFIED_NAMESPACE = "EVENT_HUB_FULLY_QUALIFIED_NAMESPACE" EVENT_HUB_NAME = "EVENT_HUB_NAME" credential = DefaultAzureCredential() async def run(): # Create a producer client to send messages to the event hub. # Specify a credential that has correct role assigned to access # event hubs namespace and the event hub name. producer = EventHubProducerClient( fully_qualified_namespace=EVENT_HUB_FULLY_QUALIFIED_NAMESPACE, eventhub_name=EVENT_HUB_NAME, credential=credential, ) async with producer: # Create a batch. event_data_batch = await producer.create_batch() # Add events to the batch. event_data_batch.add(EventData("First event ")) event_data_batch.add(EventData("Second event")) event_data_batch.add(EventData("Third event")) # Send the batch of events to the event hub. await producer.send_batch(event_data_batch) # Close credential when no longer needed. await credential.close() asyncio.run(run())
Feljegyzés
Az események Event Hubba aszinkron módon, egy kapcsolati sztring használatával történő küldésére vonatkozó egyéb lehetőségekért tekintse meg a GitHub send_async.py oldalát. Az itt látható minták az események jelszó nélküli küldésére is alkalmazhatók.
Események fogadása
Ez a rövid útmutató az Azure Blob Storage-t használja ellenőrzőpont-tárolóként. Az ellenőrzőpont-tároló az ellenőrzőpontok (azaz az utolsó olvasási pozíciók) megőrzésére szolgál.
Kövesse az alábbi javaslatokat az Azure Blob Storage ellenőrzőpont-tárolóként való használatakor:
- Minden fogyasztói csoporthoz használjon külön tárolót. Használhatja ugyanazt a tárfiókot, de csoportonként egy tárolót.
- Ne használja a tárolót semmi máshoz, és ne használja a tárfiókot semmi máshoz.
- A tárfióknak ugyanabban a régióban kell lennie, amelyben az üzembe helyezett alkalmazás található. Ha az alkalmazás helyszíni, próbálja meg kiválasztani a lehető legközelebbi régiót.
Az Azure Portal Tárfiók lapján, a Blob szolgáltatás szakaszában győződjön meg arról, hogy a következő beállítások le vannak tiltva.
- Hierarchikus névtér
- Blob áltörlése
- Verziókezelés
Azure Storage-fiók és blobtároló létrehozása
Hozzon létre egy Azure Storage-fiókot és egy blobtárolót a következő lépések végrehajtásával:
- Azure Storage-fiók létrehozása
- Blobtároló létrehozása.
- Hitelesítés a blobtárolón.
A fogadási kód későbbi használatához mindenképpen rögzítse a kapcsolati sztring és a tároló nevét.
Helyi fejlesztéskor győződjön meg arról, hogy a blobadatokhoz hozzáférő felhasználói fiók rendelkezik a megfelelő engedélyekkel. A blobadatok olvasásához és írásához tárolóblobadatok közreműködője szükséges. A szerepkör hozzárendeléséhez hozzá kell rendelnie a Felhasználói hozzáférés rendszergazdája szerepkört, vagy egy másik szerepkört, 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öreiről a hatókör áttekintési oldalán tudhat meg többet.
Ebben a forgatókönyvben engedélyeket rendel hozzá a felhasználói fiókjához, amely a tárfiókra terjed ki, hogy kövesse a minimális jogosultság elvét. Ez a gyakorlat csak a minimálisan szükséges engedélyeket biztosítja a felhasználóknak, és biztonságosabb éles környezeteket hoz létre.
Az alábbi példa a Storage Blob Data Contributor szerepkört rendeli hozzá a felhasználói fiókjához, amely olvasási és írási hozzáférést biztosít a tárfiók blobadataihoz.
Fontos
A szerepkör-hozzárendelés propagálása a legtöbb esetben egy-két percet vesz igénybe az Azure-ban, de ritkán akár nyolc percet is igénybe vehet. Ha hitelesítési hibákat kap a kód első futtatásakor, várjon néhány percet, és próbálkozzon újra.
Az Azure Portalon keresse meg a tárfiókot a fő keresősávon vagy a bal oldali navigációs sávon.
A tárfiók áttekintési lapján 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 a Storage Blob-adatszolgáltatót, és válassza ki a megfelelő eredményt, majd 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.
A csomagok telepítése események fogadásához
A fogadó oldalon telepítenie kell egy vagy több csomagot. Ebben a rövid útmutatóban az Azure Blob Storage használatával őrizheti meg az ellenőrzőpontokat, hogy a program ne olvassa el a már beolvasott eseményeket. Metaadat-ellenőrző pontokat végez a fogadott üzeneteken egy blobban rendszeres időközönként. Ez a megközelítés megkönnyíti az üzenetek fogadását később, ahonnan abbahagyta.
pip install azure-eventhub-checkpointstoreblob-aio
pip install azure-identity
Python-szkript létrehozása események fogadásához
Ebben a szakaszban egy Python-szkriptet hoz létre, amely eseményeket fogad az eseményközpontból:
Nyissa meg a kedvenc Python-szerkesztőt, például a Visual Studio Code-ot.
Hozzon létre egy recv.py nevű szkriptet.
Illessze be a következő kódot a recv.py:
A kódban valós értékekkel cserélje le a következő helyőrzőket:
BLOB_STORAGE_ACCOUNT_URL
BLOB_CONTAINER_NAME
EVENT_HUB_FULLY_QUALIFIED_NAMESPACE
EVENT_HUB_NAME
import asyncio from azure.eventhub.aio import EventHubConsumerClient from azure.eventhub.extensions.checkpointstoreblobaio import ( BlobCheckpointStore, ) from azure.identity.aio import DefaultAzureCredential BLOB_STORAGE_ACCOUNT_URL = "BLOB_STORAGE_ACCOUNT_URL" BLOB_CONTAINER_NAME = "BLOB_CONTAINER_NAME" EVENT_HUB_FULLY_QUALIFIED_NAMESPACE = "EVENT_HUB_FULLY_QUALIFIED_NAMESPACE" EVENT_HUB_NAME = "EVENT_HUB_NAME" credential = DefaultAzureCredential() async def on_event(partition_context, event): # Print the event data. print( 'Received the event: "{}" from the partition with ID: "{}"'.format( event.body_as_str(encoding="UTF-8"), partition_context.partition_id ) ) # Update the checkpoint so that the program doesn't read the events # that it has already read when you run it next time. await partition_context.update_checkpoint(event) async def main(): # Create an Azure blob checkpoint store to store the checkpoints. checkpoint_store = BlobCheckpointStore( blob_account_url=BLOB_STORAGE_ACCOUNT_URL, container_name=BLOB_CONTAINER_NAME, credential=credential, ) # Create a consumer client for the event hub. client = EventHubConsumerClient( fully_qualified_namespace=EVENT_HUB_FULLY_QUALIFIED_NAMESPACE, eventhub_name=EVENT_HUB_NAME, consumer_group="$Default", checkpoint_store=checkpoint_store, credential=credential, ) async with client: # Call the receive method. Read from the beginning of the partition # (starting_position: "-1") await client.receive(on_event=on_event, starting_position="-1") # Close credential when no longer needed. await credential.close() if __name__ == "__main__": # Run the main method. asyncio.run(main())
Feljegyzés
Példák az event hub eseményeinek aszinkron fogadására egy kapcsolati sztring használatával, lásd a GitHub recv_with_checkpoint_store_async.py oldalát. Az itt látható minták az események jelszó nélküli fogadására is alkalmazhatók.
A fogadóalkalmazás futtatása
A szkript futtatásához nyisson meg egy parancssort, amelyben a Python szerepel, majd futtassa a következő parancsot:
python recv.py
A küldő alkalmazás futtatása
A szkript futtatásához nyisson meg egy parancssort, amelyben a Python szerepel, majd futtassa a következő parancsot:
python send.py
A fogadóablakban meg kell jeleníteni az eseményközpontnak küldött üzeneteket.
Hibaelhárítás
Ha nem látja az eseményeket a fogadóablakban, vagy a kód hibát jelez, próbálkozzon az alábbi hibaelhárítási tippekkel:
Ha nem látja a recy.py eredményeit, futtassa többször send.py.
Ha a jelszó nélküli kód (hitelesítő adatokkal rendelkező) használatakor a "coroutine" hibába ütközik, győződjön meg arról, hogy importálást
azure.identity.aio
használ.Ha jelszó nélküli kóddal (hitelesítő adatokkal) jelenik meg a "Nem engedélyezett ügyfél-munkamenet" kifejezés, zárja be a hitelesítő adatokat, ha elkészült. További információ: Async hitelesítő adatok.
Ha engedélyezési hibákat tapasztal a recv.py a tárterület elérésekor, győződjön meg arról, hogy követte az Azure Storage-fiók és egy blobtároló létrehozásának lépéseit, és hozzárendelte a storage blobadatok közreműködői szerepkörét a szolgáltatásnévhez.
Ha különböző partícióazonosítókkal rendelkező eseményeket kap, ez az eredmény várható. A partíció egy adatrendezési mechanizmus, és a felhasználó alkalmazásokban szükséges alárendeltségi párhuzamossághoz köthető. Az egyes eseményközpontokban található partíciók számának kiválasztása közvetlenül kapcsolódik az egyidejű olvasók várt számához. További információ: További információ a partíciókról.
Következő lépések
Ebben a rövid útmutatóban aszinkron módon küldött és fogadott eseményeket. Ha szeretné megtudni, hogyan küldhet és fogadhat eseményeket szinkron módon, lépjen a GitHub sync_samples lapjára.
A GitHubon található összes minta (szinkron és aszinkron) esetében nyissa meg az Azure Event Hubs Python-mintákhoz készült ügyfélkódtárát.