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 Rendszergazda istrator 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.

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

  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.

    A screenshot showing how to assign a role.

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

  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.

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.

  1. Nyissa meg a kedvenc Python-szerkesztőt, például a Visual Studio Code-ot.

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

  3. 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:

  1. Azure Storage-fiók létrehozása
  2. Blobtároló létrehozása.
  3. 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 Rendszergazda istrator 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.

  1. Az Azure Portalon keresse meg a tárfiókot a fő keresősávon vagy a bal oldali navigációs sávon.

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

  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.

    A screenshot showing how to assign a storage account role.

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

  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.

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:

  1. Nyissa meg a kedvenc Python-szerkesztőt, például a Visual Studio Code-ot.

  2. Hozzon létre egy recv.py nevű szkriptet.

  3. 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.aiohaszná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.