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
Starta Visual Studio 2019.
Välj Skapa ett nytt projekt.
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.
Välj C# som programmeringsspråk.
Välj Konsol som typ av program.
Välj Konsolprogram i resultatlistan.
Välj Nästa.
Ange EventHubsSender som projektnamn, EventHubsQuickStart som lösningsnamn och välj sedan OK för att skapa projektet.
Lägga till Event Hubs NuGet-paketet
Välj Verktyg > NuGet Package Manager Package Manager > Console på menyn.
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
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;Lägg till konstanter i
Programklassen 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å.
Lägg till följande statiska egenskap i
Programklassen . 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;Ersätt
Mainmetoden med följandeasync Mainmetod. 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(); } }Skapa projektet och se till att det inte finns några fel.
Kör programmet och vänta på bekräftelsemeddelandet.
A batch of 3 events has been published.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.
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.
Hämta anslutningssträngen till lagringskontot
Anteckna anslutningssträngen och containernamnet. Du använder dem i mottagningskoden.
Skapa ett projekt för mottagaren
- I Solution Explorer högerklickar du på EventHubQuickStart-lösningen, pekar på Lägg till och väljer Ny Project.
- Välj Konsolprogram och välj Nästa.
- Ange EventHubsReceiver som Project och välj Skapa.
- I Solution Explorer högerklickar du på EventHubsReceiver och väljer Set as a Startup Project.
Lägga till Event Hubs NuGet-paketet
Välj Verktyg > NuGet Package Manager Package Manager > Console på menyn.
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.
Kör följande kommando för att installera NuGet-paketet Azure.Messaging.EventHubs:
Install-Package Azure.Messaging.EventHubsKör följande kommando för att installera NuGet-paketet Azure.Messaging.EventHubs.Processor:
Install-Package Azure.Messaging.EventHubs.Processor
Uppdatera Main-metoden
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;Lägg till konstanter i
Programklassen 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>";Lägg till följande statiska egenskaper i
Programklassen .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;Ersätt
Mainmetoden med följandeasync Mainmetod. 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(); }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; }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.
Kör mottagarprogrammet.
Du bör se ett meddelande om att händelserna har tagits emot.
Received event: Event 1 Received event: Event 2 Received event: Event 3Dessa 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.