Rövid útmutató: Események küldése az Azure Event Hubsba és események fogadása a .NET használatával
Ebben a rövid útmutatóban megtudhatja, hogyan küldhet eseményeket egy eseményközpontba, majd hogyan fogadhatja ezeket az eseményeket az eseményközpontból az Azure.Messaging.EventHubs .NET-kódtár használatával.
Feljegyzés
A gyorsútmutatók segítségével gyorsan fel lehet gyorsítani a szolgáltatást. Ha már ismeri a szolgáltatást, érdemes lehet látnia az Event Hubs .NET-mintáit a GitHub .NET SDK-adattárában: Event Hubs-minták a GitHubon, eseményfeldolgozó minták a GitHubon.
Előfeltételek
Ha még nem ismerkedik az Azure Event Hubs szolgáltatással, tekintse meg az Event Hubs áttekintését , mielőtt végighalad a rövid útmutatón.
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álhat egy ingyenes próbaverzióra, vagy használhatja az MSDN-előfizetői előnyöket a fiók létrehozásakor.
-
Microsoft Visual Studio 2022. Az Azure Event Hubs ügyféloldali kódtára a C# 8.0-ban bevezetett új funkciókat használja. A kódtárat továbbra is használhatja a korábbi C#-nyelvi verziókkal, de az új szintaxis nem érhető el. A teljes szintaxis használatához azt javasoljuk, hogy a .NET Core SDK 3.0-s vagy újabb verziójával és a nyelvi verzióval állítsa be a következőt
latest
: . Ha Visual Studio-t használ, a Visual Studio 2022 előtti verziók nem kompatibilisek a C# 8.0-projektek létrehozásához szükséges eszközökkel. A Visual Studio 2022, beleértve az ingyenes közösségi kiadást is, itt tölthető le. - 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 egy eseményközpontot a névtérben. Ezután 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 tekintse meg a rövid útmutatót: Eseményközpont létrehozása az Azure Portal használatával.
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 (Microsoft Entra-hitelesítés)
- Kapcsolati sztring
Az első lehetőség bemutatja, hogyan csatlakozhat egy Event Hubs-névtérhez az Azure Active Directoryban é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.
A Visual Studio elindítása és bejelentkezés az Azure-ba
A service bus-névtérhez való hozzáférést az alábbi lépések végrehajtásával engedélyezheti:
Indítsa el a Visual Studiót. Ha megjelenik az Első lépések ablak, válassza a Folytatás kód nélkül hivatkozást a jobb oldali panelen.
Válassza a Bejelentkezés gombot a Visual Studio jobb felső sarkában.
Jelentkezzen be a korábban szerepkörrel hozzárendelt Microsoft Entra-fiókkal.
Események küldése az eseményközpontba
Ez a szakasz bemutatja, hogyan hozhat létre .NET Core-konzolalkalmazást, amely eseményeket küld a létrehozott eseményközpontba.
Konzolalkalmazás létrehozása
Ha már meg van nyitva a Visual Studio 2022, válassza a Fájl lehetőséget a menüben, válassza az Új, majd a Project lehetőséget. Ellenkező esetben indítsa el a Visual Studio 2022-t, és válassza az Új projekt létrehozása lehetőséget, ha megjelenik egy előugró ablak.
Az Új projekt létrehozása párbeszédpanelen hajtsa végre a következő lépéseket: Ha nem látja ezt a párbeszédpanelt, válassza a Fájl lehetőséget a menüben, válassza az Új, majd a Projekt lehetőséget.
A programozási nyelvhez válassza a C# lehetőséget.
Válassza a Konzol lehetőséget az alkalmazás típusához.
Válassza ki a konzolalkalmazást az eredmények listájából.
Ezután válassza a Tovább gombot.
Adja meg az EventHubsSender nevet a projektnévhez, az EventHubsQuickStartot a megoldásnévhez, majd válassza a Tovább gombot.
A További információ lapon válassza a Létrehozás lehetőséget.
NuGet-csomagok hozzáadása a projekthez
Válassza az Eszközök>NuGet Csomagkezelő> Csomagkezelő konzol lehetőséget a menüből.
Futtassa az alábbi parancsokat az Azure.Messaging.EventHubs és az Azure.Identity NuGet-csomagok telepítéséhez. A második parancs futtatásához nyomja le az ENTER billentyűt .
Install-Package Azure.Messaging.EventHubs Install-Package Azure.Identity
Kód írása események eseményközpontba való küldéséhez
Cserélje le a fájlban lévő
Program.cs
meglévő kódot a következő mintakódra. Ezután cserélje le<EVENT_HUB_NAMESPACE>
és<HUB_NAME>
helyezze el aEventHubProducerClient
paraméterek helyőrző értékeit az Event Hubs-névtér és az eseményközpont nevére. Például:"spehubns0309.servicebus.windows.net"
és"spehub"
.Íme a kód fontos lépései:
- Létrehoz egy EventHubProducerClient objektumot a névtér és az eseményközpont nevével.
- Meghívja a CreateBatchAsync metódust az EventHubProducerClient objektumon egy EventDataBatch-objektum létrehozásához.
- Események hozzáadása a köteghez az EventDataBatch.TryAdd metódussal.
- Az üzenetköteget az EventHubProducerClient.SendAsync metódussal küldi el az eseményközpontba.
using Azure.Identity; using Azure.Messaging.EventHubs; using Azure.Messaging.EventHubs.Producer; using System.Text; // number of events to be sent to the event hub int numOfEvents = 3; // The Event Hubs client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when events are being published or read regularly. // TODO: Replace the <EVENT_HUB_NAMESPACE> and <HUB_NAME> placeholder values EventHubProducerClient producerClient = new EventHubProducerClient( "<EVENT_HUB_NAMESPACE>.servicebus.windows.net", "<HUB_NAME>", new DefaultAzureCredential()); // Create a batch of events using EventDataBatch eventBatch = await producerClient.CreateBatchAsync(); for (int i = 1; i <= numOfEvents; i++) { if (!eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes($"Event {i}")))) { // if it is too large for the batch throw new Exception($"Event {i} is too large for the batch and cannot be sent."); } } try { // Use the producer client to send the batch of events to the event hub await producerClient.SendAsync(eventBatch); Console.WriteLine($"A batch of {numOfEvents} events has been published."); Console.ReadLine(); } finally { await producerClient.DisposeAsync(); }
Hozza létre a projektet, és győződjön meg arról, hogy nincsenek hibák.
Futtassa a programot, és várja meg a megerősítést kérő üzenetet.
A batch of 3 events has been published.
Feljegyzés
Ha a Microsoft Entra-hitelesítés használatakor az "InvalidIssuer: Token issuer is invalid" hibaüzenet jelenik meg, az lehet, hogy a rendszer nem a megfelelő Entra-bérlőazonosítót használja. A kódban cserélje le az "új DefaultAzureCredential()" elemet az "új DefaultAzureCredential(new DefaultAzureCredentialOptions {TenantId = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxx"}" kifejezésre az Entra-bérlőazonosító explicit megadásához.
Fontos
Ha jelszó nélküli (az Azure Active Directory szerepköralapú hozzáférés-vezérlési) hitelesítését használja, válassza az Eszközök lehetőséget, majd a Beállítások lehetőséget. A Beállítások ablakban bontsa ki az Azure Service Authenticationt, és válassza a Fiókválasztás lehetőséget. Győződjön meg arról, hogy az Azure Event Hubs-adattulajdonosi szerepkörhöz hozzáadott fiókot használja az Event Hubs-névtérben.
Az Azure Portal Event Hubs-névtér lapján három bejövő üzenet jelenik meg az Üzenetek diagramon. Szükség esetén frissítse a lapot a diagram frissítéséhez. Eltarthat néhány másodpercig, hogy megjelenjen az üzenetek fogadása.
Feljegyzés
A teljes forráskód további információkat tartalmazó megjegyzéseket tartalmaz, lásd ezt a fájlt a GitHubon
Események fogadása az eseményközpontból
Ez a szakasz bemutatja, hogyan írhat egy .NET Core-konzolalkalmazást, amely eseményeket fogad egy eseményközpontból egy eseményfeldolgozó használatával. Az eseményfeldolgozó leegyszerűsíti az események fogadását az eseményközpontokból.
Azure Storage-fiók és blobtároló létrehozása
Ebben a rövid útmutatóban az Azure Storage-t használja ellenőrzőpont-tárolóként. Kövesse az alábbi lépéseket egy Azure Storage-fiók létrehozásához.
- Azure Storage-fiók létrehozása
- Blobtároló létrehozása
- Hitelesítés a blobtárolóban Microsoft Entra-azonosító (jelszó nélküli) hitelesítéssel vagy a névtérhez kapcsolati sztring használatával.
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
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.
Projekt létrehozása a fogadó számára
- A Megoldáskezelő ablakban kattintson a jobb gombbal az EventHubQuickStart megoldásra, mutasson a Hozzáadás pontra, és válassza az Új projekt lehetőséget.
- Válassza a Konzolalkalmazás lehetőséget, majd a Tovább gombot.
- Adja meg az EventHubsReceiver nevet a projektnévhez, és válassza a Létrehozás lehetőséget.
- A Megoldáskezelő ablakban kattintson a jobb gombbal az EventHubsReceiver elemre, és válassza a Beállítás indítási projektként lehetőséget.
NuGet-csomagok hozzáadása a projekthez
Válassza az Eszközök>NuGet Csomagkezelő> Csomagkezelő konzol lehetőséget a menüből.
A Csomagkezelő konzolablakban ellenőrizze, hogy az EventHubsReceiver van-e kiválasztva az Alapértelmezett projekthez. Ha nem, a legördülő listában válassza az EventHubsReceiver lehetőséget.
Futtassa a következő parancsot az Azure.Messaging.EventHubs és az Azure.Identity NuGet-csomagok telepítéséhez. Nyomja le az ENTER billentyűt az utolsó parancs futtatásához.
Install-Package Azure.Messaging.EventHubs Install-Package Azure.Messaging.EventHubs.Processor Install-Package Azure.Identity
A kód frissítése
Cserélje le a Program.cs fájl tartalmát a következő kódra:
Cserélje le a fájlban lévő
Program.cs
meglévő kódot a következő mintakódra. Ezután cserélje le az<STORAGE_ACCOUNT_NAME>
URI helyőrző értékeitBlobContainerClient
<BLOB_CONTAINER_NAME>
. Cserélje le a helyőrző és<HUB_NAME>
a<EVENT_HUB_NAMESPACE>
helyőrző értékeitEventProcessorClient
is.Íme a kód fontos lépései:
- EventProcessorClient-objektumot hoz létre az Event Hubs névterével és az eseményközpont nevével. BlobContainerClient objektumot kell létrehoznia a korábban létrehozott Azure Storage-tárolóhoz.
- Megadja az EventProcessorClient objektum ProcessEventAsync és ProcessErrorAsync eseményeinek kezelőit.
- Elindítja az események feldolgozását a StartProcessingAsync meghívásával az EventProcessorClient objektumon.
- 30 másodperc után leállítja az események feldolgozását a StopProcessingAsync meghívásával az EventProcessorClient objektumon.
using Azure.Identity; using Azure.Messaging.EventHubs; using Azure.Messaging.EventHubs.Consumer; using Azure.Messaging.EventHubs.Processor; using Azure.Storage.Blobs; using System.Text; // Create a blob container client that the event processor will use // TODO: Replace <STORAGE_ACCOUNT_NAME> and <BLOB_CONTAINER_NAME> with actual names BlobContainerClient storageClient = new BlobContainerClient( new Uri("https://<STORAGE_ACCOUNT_NAME>.blob.core.windows.net/<BLOB_CONTAINER_NAME>"), new DefaultAzureCredential()); // Create an event processor client to process events in the event hub // TODO: Replace the <EVENT_HUBS_NAMESPACE> and <HUB_NAME> placeholder values var processor = new EventProcessorClient( storageClient, EventHubConsumerClient.DefaultConsumerGroupName, "<EVENT_HUB_NAMESPACE>.servicebus.windows.net", "<HUB_NAME>", new DefaultAzureCredential()); // Register handlers for processing events and handling errors processor.ProcessEventAsync += ProcessEventHandler; processor.ProcessErrorAsync += ProcessErrorHandler; // Start the processing await processor.StartProcessingAsync(); // Wait for 30 seconds for the events to be processed await Task.Delay(TimeSpan.FromSeconds(30)); // Stop the processing await processor.StopProcessingAsync(); Task ProcessEventHandler(ProcessEventArgs eventArgs) { // Write the body of the event to the console window Console.WriteLine("\tReceived event: {0}", Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray())); Console.ReadLine(); return Task.CompletedTask; } Task ProcessErrorHandler(ProcessErrorEventArgs eventArgs) { // Write details about the error to the console window Console.WriteLine($"\tPartition '{eventArgs.PartitionId}': an unhandled exception was encountered. This was not expected to happen."); Console.WriteLine(eventArgs.Exception.Message); Console.ReadLine(); return Task.CompletedTask; }
Hozza létre a projektet, és győződjön meg arról, hogy nincsenek hibák.
Feljegyzés
A teljes forráskód további információkért tekintse meg ezt a fájlt a GitHubon.
Futtassa a fogadóalkalmazást.
Látnia kell egy üzenetet, amely szerint az eseményeket fogadták. Miután egy fogadott eseményüzenetet lát, nyomja le az ENTER billentyűt.
Received event: Event 1 Received event: Event 2 Received event: Event 3
Ezek az események a feladói program futtatásával korábban az eseményközpontba küldött három esemény.
Az Azure Portalon ellenőrizheti, hogy három kimenő üzenet van-e, amelyeket az Event Hubs küldött a fogadó alkalmazásnak. Frissítse a lapot a diagram frissítéséhez. Eltarthat néhány másodpercig, hogy megjelenjen az üzenetek fogadása.
Sémaérvényesítés Event Hubs SDK-alapú alkalmazásokhoz
Az Azure Schema Registry használatával sémaérvényesítést végezhet, amikor adatokat streamel az Event Hubs SDK-alapú alkalmazásaival. Az Event Hubs Azure Schema Registryje központosított adattárat biztosít a sémák kezeléséhez, és zökkenőmentesen csatlakoztathatja az új vagy meglévő alkalmazásokat a Sémaregisztrációs adatbázishoz.
További információ: Sémák érvényesítése az Event Hubs SDK-val.
Minták és referencia
Ez a rövid útmutató részletes útmutatást nyújt egy eseményköteg eseményközpontba való küldéséhez, majd fogadásához. További példákért válassza az alábbi hivatkozásokat.
- Event Hubs-minták a GitHubon
- Eseményfeldolgozó minták a GitHubon
- Azure szerepköralapú hozzáférés-vezérlési (Azure RBAC) minta
A .NET-kódtár teljes referenciáját az SDK dokumentációjában találja.
Az erőforrások eltávolítása
Törölje az Event Hubs-névteret tartalmazó erőforráscsoportot, vagy ha meg szeretné tartani az erőforráscsoportot, törölje csak a névteret.
Kapcsolódó tartalom
Tekintse meg a következő oktatóanyagot: