Odesílání událostí do nebo příjem událostí z Azure Event Hubs pomocí .NET CoreSend events to or receive events from Azure Event Hubs using .NET Core

Event Hubs je služba, která zpracovává velké objemy dat událostí (telemetrie) z připojených zařízení a aplikací.Event Hubs is a service that processes large amounts of event data (telemetry) from connected devices and applications. Data, která shromáždíte pomocí služby Event Hubs, můžete uložit pomocí úložného clusteru nebo transformovat pomocí zprostředkovatele datové analýzy v reálném čase.After you collect data into Event Hubs, you can store the data using a storage cluster or transform it using a real-time analytics provider. Schopnost shromažďovat a zpracovávat velké množství událostí je klíčovou komponentou moderních aplikačních architektur, například internetu věcí (Internet of Things – IoT).This large-scale event collection and processing capability is a key component of modern application architectures including the Internet of Things (IoT). Podrobnější přehled služby Event Hubs najdete v tématech Přehled služby Event Hubs a Funkce služby Event Hubs.For detailed overview of Event Hubs, see Event Hubs overview and Event Hubs features.

V tomto kurzu se dozvíte, jak vytvářet aplikace C# .NET Core v pro odesílání událostí nebo přijímání událostí z centra událostí.This tutorial shows how to create .NET Core applications in C# to send events to or receive events from an event hub.

Poznámka

Tento rychlý start si můžete stáhnout jako ukázku z GitHubu, nahradit řetězce EventHubConnectionString a EventHubName, hodnotami pro vaše centrum událostí a spustit.You can download this quickstart as a sample from the GitHub, replace EventHubConnectionString and EventHubName strings with your event hub values, and run it. Alternativně můžete vytvořit vlastní řešení podle kroků v tomto kurzu.Alternatively, you can follow the steps in this tutorial to create your own.

PožadavkyPrerequisites

Odesílání událostíSend events

V této části se dozvíte, jak vytvořit konzolovou aplikaci .NET Core pro odesílání událostí do centra událostí.This section shows you how to create a .NET Core console application to send events to an event hub.

Vytvoření konzolové aplikaceCreate a console application

Spusťte Visual Studio.Start Visual Studio. V nabídce Soubor klikněte na položku Nový a potom klikněte na položku Projekt.From the File menu, click New, and then click Project. Vytvořte konzolovou aplikaci .NET Core.Create a .NET Core console application.

Nový projekt

Přidání balíčku NuGet služby Event HubsAdd the Event Hubs NuGet package

Přidat Microsoft.Azure.EventHubs balíček NuGet knihovny .NET Core do svého projektu pomocí následujících kroků:Add the Microsoft.Azure.EventHubs .NET Core library NuGet package to your project by following these steps:

  1. Klikněte pravým tlačítkem na nově vytvořený projekt a vyberte možnost Spravovat balíčky NuGet.Right-click the newly created project and select Manage NuGet Packages.
  2. Klikněte na kartu Procházet, vyhledejte Microsoft.Azure.EventHubs a pak vyberte balíček Microsoft.Azure.EventHubs.Click the Browse tab, then search for "Microsoft.Azure.EventHubs" and select the Microsoft.Azure.EventHubs package. Klikněte na Instalovat a dokončete instalaci, pak zavřete dialogové okno.Click Install to complete the installation, then close this dialog box.

Napsání kódu pro odesílání zpráv do centra událostíWrite code to send messages to the event hub

  1. Na začátek souboru Program.cs přidejte následující příkazy using:Add the following using statements to the top of the Program.cs file:

    using Microsoft.Azure.EventHubs;
    using System.Text;
    using System.Threading.Tasks;
    
  2. Do třídy Program přidejte konstanty pro připojovací řetězec služby Event Hubs a cestu k entitě (název konkrétního centra událostí).Add constants to the Program class for the Event Hubs connection string and entity path (individual event hub name). Zástupné symboly v závorkách nahraďte odpovídajícími hodnotami, které jste získali při vytváření centra událostí.Replace the placeholders in brackets with the proper values that were obtained when creating the event hub. Ujistěte se, že {Event Hubs connection string} je připojovací řetězec na úrovni oboru názvů, a ne řetězec centra událostí.Make sure that the {Event Hubs connection string} is the namespace-level connection string, and not the event hub string.

    private static EventHubClient eventHubClient;
    private const string EventHubConnectionString = "{Event Hubs connection string}";
    private const string EventHubName = "{Event Hub path/name}";
    
  3. Do třídy Program přidejte následujícím způsobem novou metodu MainAsync:Add a new method named MainAsync to the Program class, as follows:

    private static async Task MainAsync(string[] args)
    {
        // Creates an EventHubsConnectionStringBuilder object from the connection string, and sets the EntityPath.
        // Typically, the connection string should have the entity path in it, but this simple scenario
        // uses the connection string from the namespace.
        var connectionStringBuilder = new EventHubsConnectionStringBuilder(EventHubConnectionString)
        {
            EntityPath = EventHubName
        };
    
        eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
    
        await SendMessagesToEventHub(100);
    
        await eventHubClient.CloseAsync();
    
        Console.WriteLine("Press ENTER to exit.");
        Console.ReadLine();
    }
    
  4. Do třídy Program přidejte následujícím způsobem novou metodu SendMessagesToEventHub:Add a new method named SendMessagesToEventHub to the Program class, as follows:

    // Uses the event hub client to send 100 messages to the event hub.
    private static async Task SendMessagesToEventHub(int numMessagesToSend)
    {
        for (var i = 0; i < numMessagesToSend; i++)
        {
            try
            {
                var message = $"Message {i}";
                Console.WriteLine($"Sending message: {message}");
                await eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));
            }
            catch (Exception exception)
            {
                Console.WriteLine($"{DateTime.Now} > Exception: {exception.Message}");
            }
    
            await Task.Delay(10);
        }
    
        Console.WriteLine($"{numMessagesToSend} messages sent.");
    }
    
  5. Do metody Main ve třídě Program přidejte následující kód:Add the following code to the Main method in the Program class:

    MainAsync(args).GetAwaiter().GetResult();
    

    Soubor Program.cs by měl vypadat takhle.Here is what your Program.cs should look like.

    namespace SampleSender
    {
        using System;
        using System.Text;
        using System.Threading.Tasks;
        using Microsoft.Azure.EventHubs;
    
        public class Program
        {
            private static EventHubClient eventHubClient;
            private const string EventHubConnectionString = "{Event Hubs connection string}";
            private const string EventHubName = "{Event Hub path/name}";
    
            public static void Main(string[] args)
            {
                MainAsync(args).GetAwaiter().GetResult();
            }
    
            private static async Task MainAsync(string[] args)
            {
                // Creates an EventHubsConnectionStringBuilder object from the connection string, and sets the EntityPath.
                // Typically, the connection string should have the entity path in it, but for the sake of this simple scenario
                // we are using the connection string from the namespace.
                var connectionStringBuilder = new EventHubsConnectionStringBuilder(EventHubConnectionString)
                {
                    EntityPath = EventHubName
                };
    
                eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
    
                await SendMessagesToEventHub(100);
    
                await eventHubClient.CloseAsync();
    
                Console.WriteLine("Press ENTER to exit.");
                Console.ReadLine();
            }
    
            // Uses the event hub client to send 100 messages to the event hub.
            private static async Task SendMessagesToEventHub(int numMessagesToSend)
            {
                for (var i = 0; i < numMessagesToSend; i++)
                {
                    try
                    {
                        var message = $"Message {i}";
                        Console.WriteLine($"Sending message: {message}");
                        await eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));
                    }
                    catch (Exception exception)
                    {
                        Console.WriteLine($"{DateTime.Now} > Exception: {exception.Message}");
                    }
    
                    await Task.Delay(10);
                }
    
                Console.WriteLine($"{numMessagesToSend} messages sent.");
            }
        }
    }
    
  6. Spusťte program a zkontrolujte, že nejsou žádné chyby.Run the program, and ensure that there are no errors.

Příjem událostíReceive events

V této části se dozvíte, jak napsat konzolovou aplikaci .NET Core, která přijímá zprávy z centra událostí pomocí třídy Event Processor Host.This section shows how to write a .NET Core console application that receives messages from an event hub using the Event Processor Host. Event Processor Host je třída rozhraní .NET, která zjednodušuje přijímání událostí z center událostí tím, že spravuje trvalé kontrolní body a paralelní příjmy z těchto center událostí.The Event Processor Host is a .NET class that simplifies receiving events from event hubs by managing persistent checkpoints and parallel receives from those event hubs. Pomocí třídy Event Processor Host můžete události rozdělit mezi několik příjemců, i když jsou hostovaní v různých uzlech.Using the Event Processor Host, you can split events across multiple receivers, even when hosted in different nodes. Tento příklad ukazuje způsob použití třídy Event Processor Host pro jednoho příjemce.This example shows how to use the Event Processor Host for a single receiver.

Poznámka

Tento rychlý start si můžete stáhnout jako ukázku z GitHubu, nahradit řetězce EventHubConnectionString, EventHubName, StorageAccountName, StorageAccountKey a StorageContainerName hodnotami pro vaše centrum událostí a spustit.You can download this quickstart as a sample from the GitHub, replace EventHubConnectionString and EventHubName, StorageAccountName, StorageAccountKey, and StorageContainerName strings with your event hub values, and run it. Alternativně můžete vytvořit vlastní řešení podle kroků v tomto kurzu.Alternatively, you can follow the steps in this tutorial to create your own.

Vytvoření účtu úložiště pro agenta Event Processor HostCreate a storage account for Event Processor Host

Event Processor Host je inteligentní agent, který zjednodušuje přijímání událostí ze služby Event Hubs tím, že spravuje trvalé kontrolní body a paralelní příjmy.The Event Processor Host is an intelligent agent that simplifies receiving events from Event Hubs by managing persistent checkpoints and parallel receives. K vytváření kontrolních bodů vyžaduje Event Processor Host účet úložiště.For checkpointing, the Event Processor Host requires a storage account. Následující příklad ukazuje, jak vytvořit účet úložiště a získat jeho klíče pro přístup:The following example shows how to create a storage account and how to get its keys for access:

  1. Na webu Azure Portal v levém horním rohu obrazovky vyberte Vytvořit prostředek.In the Azure portal, and select Create a resource at the top left of the screen.

  2. Vyberte Úložiště a pak vyberte Účet úložiště – objekt blob, soubor, tabulka, fronta.Select Storage, then select Storage account - blob, file, table, queue.

    Výběr účtu úložiště

  3. Na stránce Vytvořit účet úložiště proveďte následující kroky:On the Create storage account page, take the following steps:

    1. Zadejte název účtu úložiště.Enter a name for the storage account.

    2. Zvolte předplatné Azure obsahující centrum událostí.Choose an Azure subscription that contains the event hub.

    3. Vyberte skupinu prostředků obsahující centrum událostí.Select the resource group that has the event hub.

    4. Vyberte umístění, ve kterém se má prostředek vytvořit.Select a location in which to create the resource.

    5. Pak klikněte na Zkontrolovat a vytvořit.Then click Review + create.

      Stránka Vytvořit účet úložiště

  4. Na stránce Zkontrolovat a vytvořit zkontrolujte hodnoty a vyberte Vytvořit.On the Review + create page, review the values, and select Create.

    Kontrola nastavení účtu úložiště a jeho vytvoření

  5. Jakmile se zobrazí nasazení proběhla úspěšně zprávu, vyberte přejít k prostředku v horní části stránky.After you see the Deployments Succeeded message, select Go to resource at the top of the page. Na stránce účtu úložiště můžete také spustit tak, že váš účet úložiště vyberete ze seznamu prostředků.You can also launch the Storage Account page by selecting your storage account from the resource list.

    Výběr účtu úložiště z nasazení

  6. V okně Základy vyberte Objekty blob.In the Essentials window, select Blobs.

    Vyberte službu, objekty BLOB

  7. Vyberte + kontejner v horní části stránky, zadejte název pro kontejner a vyberte OK.Select + Container at the top, enter a name for the container, and select OK.

    Vytvoření kontejneru objektů blob

  8. Vyberte přístupové klíče v nabídce levé straně a zkopírujte hodnotu key1.Select Access keys in the left-side menu, and copy the value of key1.

    Uložte tyto hodnoty do poznámkového bloku nebo jiného dočasného umístění.Save the following values to Notepad or some other temporary location.

    • Název účtu úložištěName of the storage account
    • Přístupový klíč pro účet úložištěAccess key for the storage account
    • Název kontejneruName of the container

Vytvoření konzolové aplikaceCreate a console application

Spusťte Visual Studio.Start Visual Studio. V nabídce Soubor klikněte na položku Nový a potom klikněte na položku Projekt.From the File menu, click New, and then click Project. Vytvořte konzolovou aplikaci .NET Core.Create a .NET Core console application.

Nový projekt

Přidání balíčku NuGet služby Event HubsAdd the Event Hubs NuGet package

Pomocí následujícího postupu do svého projektu přidejte balíčky NuGet knihoven .NET Standard Microsoft.Azure.EventHubs a Microsoft.Azure.EventHubs.Processor:Add the Microsoft.Azure.EventHubs and Microsoft.Azure.EventHubs.Processor .NET Standard library NuGet packages to your project by following these steps:

  1. Klikněte pravým tlačítkem na nově vytvořený projekt a vyberte možnost Spravovat balíčky NuGet.Right-click the newly created project and select Manage NuGet Packages.
  2. Klikněte na kartu Procházet, vyhledejte Microsoft.Azure.EventHubs a pak vyberte balíček Microsoft.Azure.EventHubs.Click the Browse tab, search for Microsoft.Azure.EventHubs, and then select the Microsoft.Azure.EventHubs package. Klikněte na Instalovat a dokončete instalaci, pak zavřete dialogové okno.Click Install to complete the installation, then close this dialog box.
  3. Zopakujte kroky 1 a 2 a nainstalujte balíček Microsoft.Azure.EventHubs.Processor.Repeat steps 1 and 2, and install the Microsoft.Azure.EventHubs.Processor package.

Implementace rozhraní IEventProcessorImplement the IEventProcessor interface

  1. V Průzkumníku řešení klikněte pravým tlačítkem na projekt, klikněte na Přidat a pak klikněte na Třída.In Solution Explorer, right-click the project, click Add, and then click Class. Pojmenujte novou třídu SimpleEventProcessor.Name the new class SimpleEventProcessor.

  2. Otevřete soubor SimpleEventProcessor.cs a přidejte na jeho začátek následující příkazy using.Open the SimpleEventProcessor.cs file and add the following using statements to the top of the file.

    using Microsoft.Azure.EventHubs;
    using Microsoft.Azure.EventHubs.Processor;
    using System.Threading.Tasks;
    
  3. Implementujte rozhraní IEventProcessor.Implement the IEventProcessor interface. Celý obsah třídy SimpleEventProcessor nahraďte následujícím kódem:Replace the entire contents of the SimpleEventProcessor class with the following code:

    public class SimpleEventProcessor : IEventProcessor
    {
        public Task CloseAsync(PartitionContext context, CloseReason reason)
        {
            Console.WriteLine($"Processor Shutting Down. Partition '{context.PartitionId}', Reason: '{reason}'.");
            return Task.CompletedTask;
        }
    
        public Task OpenAsync(PartitionContext context)
        {
            Console.WriteLine($"SimpleEventProcessor initialized. Partition: '{context.PartitionId}'");
            return Task.CompletedTask;
        }
    
        public Task ProcessErrorAsync(PartitionContext context, Exception error)
        {
            Console.WriteLine($"Error on Partition: {context.PartitionId}, Error: {error.Message}");
            return Task.CompletedTask;
        }
    
        public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
        {
            foreach (var eventData in messages)
            {
                var data = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count);
                Console.WriteLine($"Message received. Partition: '{context.PartitionId}', Data: '{data}'");
            }
    
            return context.CheckpointAsync();
        }
    }
    

Aktualizace metody Main pro použití třídy SimpleEventProcessorUpdate the Main method to use SimpleEventProcessor

  1. Do horní části souboru Program.cs přidejte následující příkazy using.Add the following using statements to the top of the Program.cs file.

    using Microsoft.Azure.EventHubs;
    using Microsoft.Azure.EventHubs.Processor;
    using System.Threading.Tasks;
    
  2. Do třídy Program přidejte konstanty pro připojovací řetězec centra událostí, název centra událostí, název kontejneru účtu úložiště, název účtu úložiště a klíč účtu úložiště.Add constants to the Program class for the event hub connection string, event hub name, storage account container name, storage account name, and storage account key. Přidejte následující kód a zástupné texty nahraďte odpovídajícími hodnotami:Add the following code, replacing the placeholders with their corresponding values:

    private const string EventHubConnectionString = "{Event Hubs connection string}";
    private const string EventHubName = "{Event Hub path/name}";
    private const string StorageContainerName = "{Storage account container name}";
    private const string StorageAccountName = "{Storage account name}";
    private const string StorageAccountKey = "{Storage account key}";
    
    private static readonly string StorageConnectionString = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", StorageAccountName, StorageAccountKey);
    
  3. Do třídy Program přidejte následujícím způsobem novou metodu MainAsync:Add a new method named MainAsync to the Program class, as follows:

    private static async Task MainAsync(string[] args)
    {
        Console.WriteLine("Registering EventProcessor...");
    
        var eventProcessorHost = new EventProcessorHost(
            EventHubName,
            PartitionReceiver.DefaultConsumerGroupName,
            EventHubConnectionString,
            StorageConnectionString,
            StorageContainerName);
    
        // Registers the Event Processor Host and starts receiving messages
        await eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>();
    
        Console.WriteLine("Receiving. Press ENTER to stop worker.");
        Console.ReadLine();
    
        // Disposes of the Event Processor Host
        await eventProcessorHost.UnregisterEventProcessorAsync();
    }
    
  4. Do metody Main přidejte následující řádek kódu:Add the following line of code to the Main method:

    MainAsync(args).GetAwaiter().GetResult();
    

    Soubor Program.cs by měl vypadat takhle:Here is what your Program.cs file should look like:

    namespace SampleEphReceiver
    {
    
        public class Program
        {
            private const string EventHubConnectionString = "{Event Hubs connection string}";
            private const string EventHubName = "{Event Hub path/name}";
            private const string StorageContainerName = "{Storage account container name}";
            private const string StorageAccountName = "{Storage account name}";
            private const string StorageAccountKey = "{Storage account key}";
    
            private static readonly string StorageConnectionString = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", StorageAccountName, StorageAccountKey);
    
            public static void Main(string[] args)
            {
                MainAsync(args).GetAwaiter().GetResult();
            }
    
            private static async Task MainAsync(string[] args)
            {
                Console.WriteLine("Registering EventProcessor...");
    
                var eventProcessorHost = new EventProcessorHost(
                    EventHubName,
                    PartitionReceiver.DefaultConsumerGroupName,
                    EventHubConnectionString,
                    StorageConnectionString,
                    StorageContainerName);
    
                // Registers the Event Processor Host and starts receiving messages
                await eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>();
    
                Console.WriteLine("Receiving. Press ENTER to stop worker.");
                Console.ReadLine();
    
                // Disposes of the Event Processor Host
                await eventProcessorHost.UnregisterEventProcessorAsync();
            }
        }
    }
    
  5. Spusťte program a zkontrolujte, že nejsou žádné chyby.Run the program, and ensure that there are no errors.

Další postupNext steps

Přečtěte si následující články:Read the following articles: