Snabbstart: Skicka händelser till och ta emot händelser från Azure Event Hubs med hjälp av .NET

I den här snabbstarten lär du dig hur du skickar händelser till en händelsehubb och sedan tar emot dessa händelser från händelsehubben med hjälp av Azure.Messaging.EventHubs .NET-biblioteket.

Kommentar

Snabbstarter är till för att du snabbt ska kunna öka på tjänsten. Om du redan är bekant med tjänsten kanske du vill se .NET-exempel för Event Hubs i vår .NET SDK-lagringsplats på GitHub: Event Hubs-exempel på GitHub, händelseprocessorexempel på GitHub.

Förutsättningar

Om du inte har använt Azure Event Hubs tidigare kan du läsa Översikt över Event Hubs innan du går igenom den här snabbstarten.

För att slutföra den här snabbstarten, behöver du följande förhandskrav:

  • Microsoft Azure-prenumeration. Om du vill använda Azure-tjänster, inklusive Azure Event Hubs, behöver du en prenumeration. Om du inte har ett befintligt Azure-konto kan du registrera dig för en kostnadsfri utvärderingsversion eller använda dina MSDN-prenumerantförmåner när du skapar ett konto.
  • Microsoft Visual Studio 2022. Azure Event Hubs-klientbiblioteket använder nya funktioner som introducerades i C# 8.0. Du kan fortfarande använda biblioteket med tidigare C#-språkversioner, men den nya syntaxen är inte tillgänglig. Om du vill använda den fullständiga syntaxen rekommenderar vi att du kompilerar med .NET Core SDK 3.0 eller senare och att språkversionen är inställd på latest. Om du använder Visual Studio är versioner före Visual Studio 2022 inte kompatibla med de verktyg som behövs för att skapa C# 8.0-projekt. Visual Studio 2022, inklusive den kostnadsfria Community Edition, kan laddas ned här.
  • Skapa ett Event Hubs-namnområde och en händelsehubb. Det första steget är att använda Azure-portalen för att skapa ett Event Hubs-namnområde och en händelsehubb i namnområdet. Hämta sedan de autentiseringsuppgifter för hantering som ditt program behöver för att kommunicera med händelsehubben. Information om hur du skapar ett namnområde och en händelsehubb finns i Snabbstart: Skapa en händelsehubb med Azure-portalen.

Autentisera appen till Azure

Den här snabbstarten visar två sätt att ansluta till Azure Event Hubs:

  • Lösenordsfri (Microsoft Entra-autentisering)
  • Connection string

Det första alternativet visar hur du använder ditt säkerhetsobjekt i Azure Active Directory och rollbaserad åtkomstkontroll (RBAC) för att ansluta till ett Event Hubs-namnområde. Du behöver inte bekymra dig om att ha hårdkodade anslutningssträng i koden eller i en konfigurationsfil eller i en säker lagring som Azure Key Vault.

Det andra alternativet visar hur du använder en anslutningssträng för att ansluta till ett Event Hubs-namnområde. Om du inte har använt Azure tidigare kan det vara lättare att följa anslutningssträng alternativet. Vi rekommenderar att du använder det lösenordslösa alternativet i verkliga program och produktionsmiljöer. Mer information finns i Autentisering och auktorisering. Du kan också läsa mer om lösenordslös autentisering på översiktssidan.

Tilldela roller till din Microsoft Entra-användare

När du utvecklar lokalt kontrollerar du att användarkontot som ansluter till Azure Event Hubs har rätt behörigheter. Du behöver rollen Azure Event Hubs-dataägare för att kunna skicka och ta emot meddelanden. Om du vill tilldela dig själv den här rollen behöver du rollen Administratör för användaråtkomst eller en annan roll som innehåller åtgärden Microsoft.Authorization/roleAssignments/write . Du kan tilldela Azure RBAC-roller till en användare med hjälp av Azure-portalen, Azure CLI eller Azure PowerShell. Läs mer om tillgängliga omfång för rolltilldelningar på översiktssidan för omfång .

I följande exempel tilldelas Azure Event Hubs Data Owner rollen till ditt användarkonto, vilket ger fullständig åtkomst till Azure Event Hubs-resurser. I ett verkligt scenario följer du principen om lägsta behörighet för att ge användarna endast de minsta behörigheter som krävs för en säkrare produktionsmiljö.

Inbyggda Azure-roller för Azure Event Hubs

För Azure Event Hubs skyddas redan hanteringen av namnområden och alla relaterade resurser via Azure-portalen och AZURE-resurshanterings-API:et med hjälp av Azure RBAC-modellen. Azure tillhandahåller de inbyggda Azure-rollerna nedan för att auktorisera åtkomst till ett Event Hubs-namnområde:

Om du vill skapa en anpassad roll läser du Rättigheter som krävs för Event Hubs-åtgärder.

Viktigt!

I de flesta fall tar det en minut eller två innan rolltilldelningen sprids i Azure. I sällsynta fall kan det ta upp till åtta minuter. Om du får autentiseringsfel när du först kör koden väntar du en stund och försöker igen.

  1. Leta upp event hubs-namnområdet i Azure-portalen med hjälp av huvudsökfältet eller det vänstra navigeringsfältet.

  2. På översiktssidan väljer du Åtkomstkontroll (IAM) på den vänstra menyn.

  3. På sidan Åtkomstkontroll (IAM) väljer du fliken Rolltilldelningar .

  4. Välj + Lägg till på den översta menyn och sedan Lägg till rolltilldelning från den resulterande nedrullningsbara menyn.

    En skärmbild som visar hur du tilldelar en roll.

  5. Använd sökrutan för att filtrera resultatet till önskad roll. I det här exemplet söker Azure Event Hubs Data Owner du efter och väljer matchande resultat. Välj sedan Nästa.

  6. Under Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn och sedan + Välj medlemmar.

  7. I dialogrutan söker du efter ditt Microsoft Entra-användarnamn (vanligtvis din user@domain e-postadress) och väljer sedan Välj längst ned i dialogrutan.

  8. Välj Granska + tilldela för att gå till den sista sidan och sedan Granska + tilldela igen för att slutföra processen.

Starta Visual Studio och logga in på Azure

Du kan auktorisera åtkomst till Service Bus-namnområdet med hjälp av följande steg:

  1. Starta Visual Studio. Om du ser fönstret Kom igång väljer du länken Fortsätt utan kod i den högra rutan.

  2. Välj knappen Logga in längst upp till höger i Visual Studio.

    Skärmbild som visar en knapp för att logga in på Azure med Visual Studio.

  3. Logga in med det Microsoft Entra-konto som du tilldelade en roll till tidigare.

    Skärmbild som visar kontovalet.

Skicka händelser till händelsehubben

Det här avsnittet visar hur du skapar ett .NET Core-konsolprogram för att skicka händelser till den händelsehubb som du skapade.

Skapa ett konsolprogram

  1. Om du redan har Visual Studio 2022 öppet väljer du Arkiv på menyn, väljer Nytt och sedan Projekt. Annars startar du Visual Studio 2022 och väljer Skapa ett nytt projekt om du ser ett popup-fönster.

  2. I dialogrutan Skapa ett nytt projekt gör du följande: Om du inte ser den här dialogrutan väljer du Arkiv på menyn, väljer Nytt och sedan Projekt.

    1. Välj C# för programmeringsspråket.

    2. Välj Konsol för programmets typ.

    3. Välj Konsolprogram i resultatlistan.

    4. Välj sedan Nästa.

      Bild som visar dialogrutan Nytt projekt

  3. Ange EventHubsSender som projektnamn, EventHubsQuickStart som lösningsnamn och välj sedan Nästa.

    Bild som visar sidan där du anger lösnings- och projektnamn

  4. På sidan Ytterligare information väljer du Skapa.

Lägg till NuGet-paketen i projektet

  1. Välj Verktyg>NuGet Package Manager Package Manager-konsolen> på menyn.

  2. Kör följande kommandon för att installera Azure.Messaging.EventHubs - och Azure.Identity NuGet-paket. Tryck på RETUR för att köra det andra kommandot.

    Install-Package Azure.Messaging.EventHubs
    Install-Package Azure.Identity
    

Skriva kod för att skicka händelser till händelsehubben

  1. Ersätt den befintliga koden i Program.cs filen med följande exempelkod. <EVENT_HUB_NAMESPACE> Ersätt sedan och <HUB_NAME> platshållarvärden för parametrarna EventHubProducerClient med namnen på eventhubbarnas namnområde och händelsehubben. Exempelvis: "spehubns0309.servicebus.windows.net" och "spehub".

    Här är de viktiga stegen i koden:

    1. Skapar ett EventHubProducerClient-objekt med namnområdet och händelsehubbens namn.
    2. Anropar metoden CreateBatchAsyncEventHubProducerClient-objektet för att skapa ett EventDataBatch-objekt .
    3. Lägg till händelser i batchen med metoden EventDataBatch.TryAdd .
    4. Skickar batchen med meddelanden till händelsehubben med metoden EventHubProducerClient.SendAsync .
    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();
    }
    
  1. Skapa projektet och se till att det inte finns några fel.

  2. Kör programmet och vänta på bekräftelsemeddelandet.

    A batch of 3 events has been published.
    

    Viktigt!

    Om du använder autentiseringen Lösenordslös (Rollbaserad åtkomstkontroll i Azure Active Directory) väljer du Verktyg och sedan Alternativ. I fönstret Alternativ expanderar du Azure Service Authentication och väljer Kontoval. Bekräfta att du använder kontot som lades till i rollen Azure Event Hubs-dataägare i Event Hubs-namnområdet.

  3. På sidan Event Hubs-namnområde i Azure-portalen visas tre inkommande meddelanden i diagrammet Meddelanden . Uppdatera sidan för att uppdatera diagrammet om det behövs. Det kan ta några sekunder innan det visar att meddelandena har tagits emot.

    Bild av Sidan i Azure-portalen för att verifiera att händelsehubben tog emot händelserna

    Kommentar

    Den fullständiga källkoden med fler informationskommentare finns i den här filen på GitHub

Ta emot händelser från händelsehubben

Det här avsnittet visar hur du skriver ett .NET Core-konsolprogram som tar emot händelser från en händelsehubb med hjälp av en händelseprocessor. Händelseprocessorn förenklar mottagandet av händelser från händelsehubbar.

Skapa ett Azure Storage-konto och en blobcontainer

I den här snabbstarten använder du Azure Storage som kontrollpunktsarkiv. Följ de här stegen för att skapa ett Azure Storage-konto.

  1. Skapa ett Azure Storage-konto
  2. Skapa en blobcontainer
  3. Autentisera till blobcontainern med antingen Microsoft Entra-ID (lösenordslös) autentisering eller en anslutningssträng till namnområdet.

Följ dessa rekommendationer när du använder Azure Blob Storage som kontrollpunktslager:

  • Använd en separat container för varje konsumentgrupp. Du kan använda samma lagringskonto, men använda en container per grupp.
  • Använd inte containern för något annat och använd inte lagringskontot för något annat.
  • Lagringskontot ska finnas i samma region som det distribuerade programmet finns i. Om programmet är lokalt kan du försöka välja den region som är närmast.

På sidan Lagringskonto i Azure-portalen i avsnittet Blob Service kontrollerar du att följande inställningar är inaktiverade.

  • Hierarkisk namnrymd
  • Mjuk borttagning av blob
  • Versionshantering

När du utvecklar lokalt kontrollerar du att användarkontot som har åtkomst till blobdata har rätt behörigheter. Du behöver Storage Blob Data-deltagare för att läsa och skriva blobdata. Om du vill tilldela dig själv den här rollen måste du tilldelas rollen Administratör för användaråtkomst eller en annan roll som innehåller åtgärden Microsoft.Authorization/roleAssignments/write . Du kan tilldela Azure RBAC-roller till en användare med hjälp av Azure-portalen, Azure CLI eller Azure PowerShell. Du kan lära dig mer om tillgängliga omfång för rolltilldelningar på översiktssidan för omfång .

I det här scenariot tilldelar du behörigheter till ditt användarkonto, begränsat till lagringskontot, för att följa principen om lägsta behörighet. Den här metoden ger användarna endast de minsta behörigheter som krävs och skapar säkrare produktionsmiljöer.

I följande exempel tilldelas rollen Storage Blob Data Contributor till ditt användarkonto, vilket ger både läs- och skrivåtkomst till blobdata i ditt lagringskonto.

Viktigt!

I de flesta fall tar det en minut eller två för rolltilldelningen att spridas i Azure, men i sällsynta fall kan det ta upp till åtta minuter. Om du får autentiseringsfel när du först kör koden väntar du en stund och försöker igen.

  1. Leta upp ditt lagringskonto i Azure-portalen med hjälp av huvudsökfältet eller det vänstra navigeringsfältet.

  2. På översiktssidan för lagringskontot väljer du Åtkomstkontroll (IAM) på den vänstra menyn.

  3. På sidan Åtkomstkontroll (IAM) väljer du fliken Rolltilldelningar .

  4. Välj + Lägg till på den översta menyn och sedan Lägg till rolltilldelning från den resulterande nedrullningsbara menyn.

    En skärmbild som visar hur du tilldelar en lagringskontoroll.

  5. Använd sökrutan för att filtrera resultatet till önskad roll. I det här exemplet söker du efter Storage Blob Data Contributor och väljer matchande resultat och väljer sedan Nästa.

  6. Under Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn och sedan + Välj medlemmar.

  7. I dialogrutan söker du efter ditt Microsoft Entra-användarnamn (vanligtvis din user@domain e-postadress) och väljer sedan Välj längst ned i dialogrutan.

  8. Välj Granska + tilldela för att gå till den sista sidan och sedan Granska + tilldela igen för att slutföra processen.

Skapa ett projekt för mottagaren

  1. I Solution Explorer-fönstret högerklickar du på EventHubQuickStart-lösningen, pekar på Lägg till och väljer Nytt projekt.
  2. Välj Konsolprogram och välj Nästa.
  3. Ange EventHubsReceiver som projektnamn och välj Skapa.
  4. I fönstret Solution Explorer högerklickar du på EventHubsReceiver och väljer Ange som ett startprojekt.

Lägg till NuGet-paketen i projektet

  1. Välj Verktyg>NuGet Package Manager Package Manager-konsolen> på menyn.

  2. I fönstret Package Manager-konsolen bekräftar du att EventHubsReceiver har valts för standardprojektet. Om inte använder du listrutan för att välja EventHubsReceiver.

  3. Kör följande kommando för att installera Azure.Messaging.EventHubs och Azure.Identity NuGet-paketen. Tryck på RETUR för att köra det sista kommandot.

    Install-Package Azure.Messaging.EventHubs
    Install-Package Azure.Messaging.EventHubs.Processor
    Install-Package Azure.Identity
    

Uppdatera koden

Ersätt innehållet i Program.cs med följande kod:

  1. Ersätt den befintliga koden i Program.cs filen med följande exempelkod. <STORAGE_ACCOUNT_NAME> Ersätt sedan platshållarvärdena och <BLOB_CONTAINER_NAME> för URI:BlobContainerClientn. <EVENT_HUB_NAMESPACE> Ersätt platshållarvärdena och <HUB_NAME> för EventProcessorClient den också.

    Här är de viktiga stegen i koden:

    1. Skapar ett EventProcessorClient-objekt med Event Hubs-namnområdet och händelsehubbens namn. Du måste skapa BlobContainerClient-objektet för containern i Azure Storage som du skapade tidigare.
    2. Anger hanterare för ProcessEventAsync- och ProcessErrorAsync-händelserna för EventProcessorClient-objektet.
    3. Börjar bearbeta händelser genom att anropa StartProcessingAsyncEventProcessorClient-objektet .
    4. Slutar bearbeta händelser efter 30 sekunder genom att anropa StopProcessingAsyncEventProcessorClient-objektet .
    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_CONTATINAER_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;
    }
    
  1. Skapa projektet och se till att det inte finns några fel.

    Kommentar

    Fullständig källkod med mer information finns i den här filen på GitHub.

  2. Kör mottagarprogrammet.

  3. Du bör se ett meddelande om att händelserna har tagits emot. Tryck på RETUR när du ser ett mottaget händelsemeddelande.

    Received event: Event 1
    Received event: Event 2
    Received event: Event 3    
    

    Dessa händelser är de tre händelser som du skickade till händelsehubben tidigare genom att köra avsändarprogrammet.

  4. I Azure-portalen kan du kontrollera att det finns tre utgående meddelanden, som Event Hubs skickade till det mottagande programmet. Uppdatera sidan för att uppdatera diagrammet. Det kan ta några sekunder innan det visar att meddelandena har tagits emot.

    Bild av Sidan i Azure-portalen för att verifiera att händelsehubben skickade händelser till den mottagande appen

Schemavalidering för Event Hubs SDK-baserade program

Du kan använda Azure Schema Registry för att utföra schemavalidering när du strömmar data med dina Event Hubs SDK-baserade program. Azure Schema Registry of Event Hubs tillhandahåller en centraliserad lagringsplats för att hantera scheman och du kan smidigt ansluta dina nya eller befintliga program till Schema Registry.

Mer information finns i Verifiera scheman med Event Hubs SDK.

Exempel och referens

Den här snabbstarten innehåller stegvisa instruktioner för att implementera ett scenario med att skicka en batch händelser till en händelsehubb och sedan ta emot dem. Om du vill ha fler exempel väljer du följande länkar.

Fullständig .NET-biblioteksreferens finns i vår SDK-dokumentation.

Rensa resurser

Ta bort den resursgrupp som har Event Hubs-namnområdet eller ta bara bort namnområdet om du vill behålla resursgruppen.

Se följande självstudie: