Skicka händelser till och ta emot händelser från Azure Event Hubs – .NET (Azure.Messaging.EventHubs)

Den här snabbstarten visar hur du skickar händelser till och tar emot händelser från en händelsehubb med hjälp av .NET-biblioteket Azure.Messaging.EventHubs.

Förutsättningar

Om du inte har börjat använda Azure Event Hubs kan du gå Event Hubs översikt innan du gör 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-Azure Event Hubs måste du ha 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 2019. I Azure Event Hubs-klientbiblioteket används 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 språkversionen är inställd på latest . Om du använder Visual Studio är versioner före Visual Studio 2019 inte kompatibla med de verktyg som behövs för att skapa C# 8.0-projekt. Visual Studio 2019, inklusive den kostnadsfria Community Edition, kan laddas ned här.
  • Skapa ett Event Hubs och en händelsehubb. Det första steget är att använda Azure Portal för att skapa ett namnområde av typen Event Hubs och hämta de autentiseringsuppgifter för hantering som programmet behöver för att kommunicera med händelsehubben. Om du behöver skapa ett namnområde och en händelsehubb följer du anvisningarna i den här artikeln. Hämta sedan anslutningssträngen för Event Hubs namnområdet genom att följa anvisningarna i artikeln: Hämta anslutningssträngen. Du använder anslutningssträngen senare i den här snabbstarten.

Skicka händelser

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

Skapa ett konsolprogram

  1. Starta Visual Studio 2019.

  2. Välj Skapa ett nytt projekt.

  3. 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 väljer sedan Project.

    1. Välj C# som programmeringsspråk.

    2. Välj Konsol som typ av program.

    3. Välj Konsolprogram i resultatlistan.

    4. Välj Nästa.

      Bild som visar dialogrutan Project ny fil

  4. Ange EventHubsSender som projektnamn, EventHubsQuickStart som lösningsnamn och välj sedan OK för att skapa projektet.

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

Lägga till Event Hubs NuGet-paketet

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

  2. Kör följande kommando för att installera NuGet-paketet Azure.Messaging.EventHubs:

    Install-Package Azure.Messaging.EventHubs
    

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

  1. Lägg till följande using -instruktioner överst i filen Program.cs:

    using System;
    using System.Text;
    using System.Threading.Tasks;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Producer;
    
  2. Lägg till konstanter i Program klassen för Event Hubs anslutningssträngen och händelsehubbens namn.

        // connection string to the Event Hubs namespace
        private const string connectionString = "<EVENT HUBS NAMESPACE - CONNECTION STRING>";
    
        // name of the event hub
        private const string eventHubName = "<EVENT HUB NAME>";
    
        // number of events to be sent to the event hub
        private const int numOfEvents = 3;
    

    Anteckning

    Ersätt platshållarvärdena med anslutningssträngen till ditt namnområde och namnet på händelsehubben. Kontrollera att anslutningssträngen är anslutningssträngen på namnområdesnivå.

  3. Lägg till följande statiska egenskap i Program klassen . Se kodkommentarerna.

        // 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.
        static EventHubProducerClient producerClient;    
    
  4. Ersätt Main metoden med följande async Main metod. Mer information finns i kodkommentarerna.

        static async Task Main()
        {
            // Create a producer client that you can use to send events to an event hub
            producerClient = new EventHubProducerClient(connectionString, eventHubName);
    
            // 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.");
            }
            finally
            {
                await producerClient.DisposeAsync();
            }
        }
    
  5. Skapa projektet och se till att det inte finns några fel.

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

    A batch of 3 events has been published.
    
  7. I Azure Portal kan du kontrollera att händelsehubben har tagit emot händelserna. Växla till vyn Meddelanden i avsnittet Mått. Uppdatera sidan för att uppdatera diagrammet. Det kan ta några sekunder för den att visa att meddelandena har tagits emot.

    Bild av sidan Azure Portal för att verifiera att händelsehubben tog emot händelserna

    Anteckning

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

Ta emot händelser

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 gör det enklare att ta emot händelser från händelsehubbbar genom att hantera permanenta kontrollpunkter och parallella mottagningar från dessa händelsehubbbar. En händelseprocessor är associerad med en specifik händelsehubb och en konsumentgrupp. Den tar emot händelser från flera partitioner i händelsehubben och skicka dem till en hanterardelegat för bearbetning med hjälp av kod som du anger.

Varning

Om du kör den här koden Azure Stack Hub får du körningsfel om du inte riktar in dig på en Storage API-version. Det beror på att Event Hubs SDK använder det senaste tillgängliga AZURE STORAGE-API:et i Azure som kanske inte är tillgängligt på din Azure Stack Hub plattform. Azure Stack Hub kan ha stöd för en annan version Storage Blob SDK än de som vanligtvis är tillgängliga i Azure. Om du använder Azure Blob Storage som kontrollpunktslager kontrollerar du vilken Azure Storage API-version som stöds för ditt Azure Stack Hub-bygge och riktar in dig på den versionen i koden.

Om du till exempel kör på Azure Stack Hub version 2005 är den högsta tillgängliga versionen för Storage-tjänsten version 2019-02-02. Som standard använder Event Hubs SDK-klientbiblioteket den högsta tillgängliga versionen i Azure (2019-07-07 vid tidpunkten för SDK-versionen). I det här fallet måste du, förutom att följa stegen i det här avsnittet, även lägga till kod för att rikta Storage-tjänstens API-version 2019-02-02. Ett exempel på hur du riktar in dig på en Storage API-version finns i det här exemplet på GitHub.

Skapa en Azure Storage och en blobcontainer

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

  1. Skapa ett Azure Storage-konto

  2. Skapa en blobcontainer

  3. Hämta anslutningssträngen till lagringskontot

    Anteckna anslutningssträngen och containernamnet. Du använder dem i mottagningskoden.

Skapa ett projekt för mottagaren

  1. I Solution Explorer högerklickar du på EventHubQuickStart-lösningen, pekar på Lägg till och väljer Ny Project.
  2. Välj Konsolprogram och välj Nästa.
  3. Ange EventHubsReceiver som Project och välj Skapa.
  4. I Solution Explorer högerklickar du på EventHubsReceiver och väljer Set as a Startup Project.

Lägga till Event Hubs NuGet-paketet

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

  2. I fönstret Package Manager Console (Package Manager-konsol) bekräftar du att EventHubsReceiver har valts för standardprojektet. Annars använder du listrutan för att välja EventHubsReceiver.

  3. Kör följande kommando för att installera NuGet-paketet Azure.Messaging.EventHubs:

    Install-Package Azure.Messaging.EventHubs
    
  4. Kör följande kommando för att installera NuGet-paketet Azure.Messaging.EventHubs.Processor:

    Install-Package Azure.Messaging.EventHubs.Processor
    

Uppdatera Main-metoden

  1. Lägg till följande using -instruktioner överst i filen Program.cs.

    using System;
    using System.Text;
    using System.Threading.Tasks;
    using Azure.Storage.Blobs;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Consumer;
    using Azure.Messaging.EventHubs.Processor;
    
  2. Lägg till konstanter i Program klassen för Event Hubs anslutningssträngen och händelsehubbens namn. Ersätt platshållarna inom hakparentes med rätt värden som du fick när du skapade händelsehubben. Ersätt platshållarna inom hakparentes med rätt värden som du fick när du skapade händelsehubben och lagringskontot (åtkomstnycklar – primär anslutningssträng). Kontrollera att {Event Hubs namespace connection string} är anslutningssträngen på namnrymdsnivå och inte händelsehubbens sträng.

        private const string ehubNamespaceConnectionString = "<EVENT HUBS NAMESPACE - CONNECTION STRING>";
        private const string eventHubName = "<EVENT HUB NAME>";
        private const string blobStorageConnectionString = "<AZURE STORAGE CONNECTION STRING>";
        private const string blobContainerName = "<BLOB CONTAINER NAME>";
    
  3. Lägg till följande statiska egenskaper i Program klassen .

        static BlobContainerClient storageClient;
    
        // 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.        
        static EventProcessorClient processor;    
    
  4. Ersätt Main metoden med följande async Main metod. Mer information finns i kodkommentarerna.

        static async Task Main()
        {
            // Read from the default consumer group: $Default
            string consumerGroup = EventHubConsumerClient.DefaultConsumerGroupName;
    
            // Create a blob container client that the event processor will use 
            storageClient = new BlobContainerClient(blobStorageConnectionString, blobContainerName);
    
            // Create an event processor client to process events in the event hub
            processor = new EventProcessorClient(storageClient, consumerGroup, ehubNamespaceConnectionString, eventHubName);
    
            // 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();
        }
    
  5. Lägg nu till följande metoder för händelse- och felhanterare i klassen .

        static async 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()));
    
            // Update checkpoint in the blob storage so that the app receives only new events the next time it's run
            await eventArgs.UpdateCheckpointAsync(eventArgs.CancellationToken);
        }
    
        static 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);
            return Task.CompletedTask;
        }    
    
  6. Skapa projektet och se till att det inte finns några fel.

    Anteckning

    Den fullständiga källkoden med mer informationskommentarer finns i den här filen på GitHub.

  7. Kör mottagarprogrammet.

  8. Du bör se ett meddelande om att händelserna har tagits emot.

    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.

Nästa steg

Kolla in exemplen på GitHub.