Краткое руководство. Отправка и получение событий с помощью .NET Framework в Центрах событий AzureQuickstart: Send events to or receive events from Azure Event Hubs using .NET Framework

Центры событий Azure — это платформа потоковой передачи больших данных и служба приема событий, принимающая и обрабатывающая миллионы событий в секунду.Azure Event Hubs is a Big Data streaming platform and event ingestion service, capable of receiving and processing millions of events per second. Центры событий могут обрабатывать и сохранять события, данные и телеметрию, созданные распределенным программным обеспечением и устройствами.Event Hubs can process and store events, data, or telemetry produced by distributed software and devices. Данные, отправляемые в концентратор событий, можно преобразовывать и сохранять с помощью любого поставщика аналитики в реальном времени, а также с помощью адаптеров пакетной обработки или хранения.Data sent to an event hub can be transformed and stored using any real-time analytics provider or batching/storage adapters. Подробный обзор Центров событий см. в статьях Что такое Центры событий Azure? и Обзор функций Центров событий.For detailed overview of Event Hubs, see Event Hubs overview and Event Hubs features.

В этом руководстве описано, как создавать консольные приложения .NET Framework на C# для отправки и получения событий через концентратор событий.This tutorial shows how to create .NET Framework console applications in C# to send events to or receive events from an eventhub.

предварительные требованияPrerequisites

Для работы с данным руководством вам потребуется:To complete this tutorial, you need the following prerequisites:

  • Microsoft Visual Studio 2019.Microsoft Visual Studio 2019.
  • Создайте пространство имен Центров событий и концентратор событий.Create an Event Hubs namespace and an event hub. Первым шагом является использование портала Azure для создания пространства имен типа Центров событий и получение учетных данных управления, необходимых приложению для взаимодействия с концентратором событий.The first step is to use the Azure portal to create a namespace of type Event Hubs, and obtain the management credentials your application needs to communicate with the event hub. Чтобы создать пространство имен и концентратор событий, выполните инструкции из этой статьи.To create a namespace and an event hub, follow the procedure in this article. Получите строку подключения для пространства имен концентратора событий, следуя инструкциям из статьи Получение строки подключения на портале.Then, get the connection string for the event hub namespace by following instructions from the article: Get connection string. Строка подключения понадобится нам позже.You use the connection string later in this tutorial.

Отправка событийSend events

В этом разделе показано, как создать консольное приложение .NET Framework, которое отправляет события в концентратор событий.This section shows you how to create a .NET Framework console application to send events to an event hub.

Создание консольного приложениеCreate a console application

Создайте в Visual Studio новый проект Visual C# для классических приложений с помощью шаблона проекта Консольное приложение .In Visual Studio, create a new Visual C# Desktop App project using the Console Application project template. Назовите проект Sender.Name the project Sender.

Создание консольного приложения

Добавление пакета NuGet для Центров событийAdd the Event Hubs NuGet package

  1. В обозревателе решений щелкните правой кнопкой мыши проект Sender и выберите пункт Управление пакетами NuGet для решения.In Solution Explorer, right-click the Sender project, and then click Manage NuGet Packages for Solution.

  2. Щелкните вкладку Обзор и выполните поиск WindowsAzure.ServiceBus.Click the Browse tab, then search for WindowsAzure.ServiceBus. Щелкните Установитьи примите условия использования.Click Install, and accept the terms of use.

    Установка пакета NuGet для Служебной шины

    Visual Studio скачает, установит и добавит ссылку на пакет NuGet библиотеки служебной шины Azure.Visual Studio downloads, installs, and adds a reference to the Azure Service Bus library NuGet package.

Написание кода для отправки сообщений в концентратор событийWrite code to send messages to the event hub

  1. Добавьте следующие инструкции using в начало файла Program.cs :Add the following using statements at the top of the Program.cs file:

    using System.Threading;
    using Microsoft.ServiceBus.Messaging;
    
  2. Добавьте в класс Program приведенные ниже поля и укажите в качестве значений имя концентратора событий, созданного в предыдущем разделе, и сохраненную ранее строку подключения уровня пространства имен.Add the following fields to the Program class, substituting the placeholder values with the name of the event hub you created in the previous section, and the namespace-level connection string you saved previously. Вы можете скопировать строку подключения для концентратора событий из поля Строка подключения — первичный ключ в разделе RootManageSharedAccessKey на странице Центра событий на портале Azure.You can copy connection string for your event hub from Connection string-primary key under RootManageSharedAccessKey on the Event Hub page in the Azure portal. Подробные сведения см. в этом разделе.For detailed steps, see Get connection string.

    static string eventHubName = "Your Event Hub name";
    static string connectionString = "namespace connection string";
    
  3. Добавьте следующий метод в класс Program .Add the following method to the Program class:

    static void SendingRandomMessages()
    {
        var eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, eventHubName);
        while (true)
        {
            try
            {
                var message = Guid.NewGuid().ToString();
                Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, message);
                eventHubClient.Send(new EventData(Encoding.UTF8.GetBytes(message)));
            }
            catch (Exception exception)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("{0} > Exception: {1}", DateTime.Now, exception.Message);
                Console.ResetColor();
            }
    
            Thread.Sleep(200);
        }
    }
    

    Этот метод постоянно отправляет события в концентратор событий с задержкой 200 мс.This method continuously sends events to your event hub with a 200-ms delay.

  4. Наконец, добавьте следующие строки в метод Main :Finally, add the following lines to the Main method:

    Console.WriteLine("Press Ctrl-C to stop the sender process");
    Console.WriteLine("Press Enter to start now");
    Console.ReadLine();
    SendingRandomMessages();
    
  5. Запустите программу и убедитесь в отсутствии ошибок.Run the program, and ensure that there are no errors.

Получение событийReceive events

В этом разделе показано, как создать консольное приложение .NET Framework, которое получает сообщения из концентратора событий с помощью узла обработчика событий.In this section, you write a .NET Framework console application that receives messages from an event hub using the Event Processor Host. Узел обработчика событий представляет собой класс .NET, который упрощает прием событий из концентраторов событий путем управления постоянными контрольными точками и одновременно принимает сообщения от этих концентраторов событий.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. С помощью класса EventProcessorHost можно разделить события между несколькими получателями даже в том случае, если они размещены в разных узлах.Using the Event Processor Host, you can split events across multiple receivers, even when hosted in different nodes.

Создание учетной записи хранения для узла обработчика событийCreate a storage account for Event Processor Host

Узел обработчика событий представляет собой интеллектуальный агент, который упрощает прием событий от Центров событий путем управления постоянными контрольными точками и параллельным приемом.The Event Processor Host is an intelligent agent that simplifies receiving events from Event Hubs by managing persistent checkpoints and parallel receives. Для создания контрольных точек узлу обработчика событий требуется учетная запись хранения.For checkpointing, the Event Processor Host requires a storage account. В следующем примере показано, как создать учетную запись хранения и как получить ключи для доступа:The following example shows how to create a storage account and how to get its keys for access:

  1. В меню портала Azure выберите Создать ресурс.From the Azure portal menu, select Create a resource.

    Создание пункта меню ресурса, портал Microsoft Azure

  2. Выберите Хранилище > Учетная запись хранения.Select Storage > Storage account.

    Выбор учетной записи хранения, портал Microsoft Azure

  3. На странице Создание учетной записи хранения выполните следующие действия:On the Create storage account page, take the following steps:

    1. Укажите имя учетной записи хранения.Enter the Storage account name.

    2. Выберите подписку Azure, содержащую концентратор событий.Choose an Azure Subscription that contains the event hub.

    3. Выберите или создайте группу ресурсов, содержащую концентратор событий.Choose or create the Resource group that has the event hub.

    4. Выберите расположение для создания ресурса.Pick a Location in which to create the resource.

    5. Выберите Review + create (Просмотреть и создать).Select Review + create.

      Команда просмотра и создания, создание учетной записи хранения, портал Microsoft Azure

  4. На странице Просмотр и создание проверьте значения и выберите Создать.On the Review + create page, review the values, and select Create.

    Проверка параметров учетной записи хранения и создание, портал Microsoft Azure

  5. После получения уведомления Выполненные развертывания выберите Перейти к ресурсу, чтобы открыть страницу учетной записи хранения.After you see the Deployments Succeeded message in your notifications, select Go to resource to open the Storage Account page. Кроме того, вы можете развернуть сведения о развертывании, а затем выбрать новый ресурс в списке ресурсов.Alternatively, you can expand Deployment details and then select your new resource from the resource list.

    Переход к ресурсу, развертывание учетной записи хранения, портал Microsoft Azure

  6. Выберите Контейнеры.Select Containers.

    Выбор службы контейнеров больших двоичных объектов, учетные записи хранения, портал Microsoft Azure

  7. В верхней части выберите + Контейнер, введите имя для контейнера и нажмите кнопку ОК.Select + Container at the top, enter a Name for the container, and select OK.

    Создание контейнера больших двоичных объектов, учетные записи хранения, портал Microsoft Azure

  8. Выберите Ключи доступа на странице Учетная запись хранения и скопируйте значение key1.Choose Access keys from the Storage account page menu, and copy the value of key1.

    Сохраните на время указанные ниже значения в Блокноте или любом другом месте.Save the following values to Notepad or some other temporary location.

    • Имя учетной записи храненияName of the storage account
    • Доступ к учетной записи храненияAccess key for the storage account
    • Имя контейнераName of the container

Создание консольного приложениеCreate a console application

Создайте в Visual Studio новый проект Visual C# для классических приложений с помощью шаблона проекта Консольное приложение.In Visual Studio, create a new Visual C# Desktop App project using the Console Application project template. Присвойте проекту имя Получатель.Name the project Receiver.

Создание консольного приложения

Добавление пакета NuGet для Центров событийAdd the Event Hubs NuGet package

  1. В обозревателе решений щелкните правой кнопкой мыши проект Получатель и выберите пункт Управление пакетами NuGet для решения.In Solution Explorer, right-click the Receiver project, and then click Manage NuGet Packages for Solution.

  2. Щелкните вкладку Обзор и выполните поиск Microsoft Azure Service Bus Event Hub - EventProcessorHost.Click the Browse tab, then search for Microsoft Azure Service Bus Event Hub - EventProcessorHost. Щелкните Установитьи примите условия использования.Click Install, and accept the terms of use.

    Поиск пакета NuGet для узла обработчика событий

    Visual Studio скачает, установит и добавит ссылку на пакет концентратора событий служебной шины Azure EventProcessorHost NuGetсо всеми его зависимостями.Visual Studio downloads, installs, and adds a reference to the Azure Service Bus Event Hub - EventProcessorHost NuGet package, with all its dependencies.

Реализация интерфейса IEventProcessorImplement the IEventProcessor interface

  1. Щелкните правой кнопкой мыши проект Получатель, а затем выберите пункты Добавить и Класс.Right-click the Receiver project, click Add, and then click Class. Присвойте новому классу имя SimpleEventProcessor, а затем нажмите кнопку Добавить, чтобы создать класс.Name the new class SimpleEventProcessor, and then click Add to create the class.

    Добавление класса SimpleEventProcessor

  2. Добавьте в начало файла SimpleEventProcessor.cs следующие инструкции:Add the following statements at the top of the SimpleEventProcessor.cs file:

    using Microsoft.ServiceBus.Messaging;
    using System.Diagnostics;
    
  3. Замените следующий код текстом класса:Substitute the following code for the body of the class:

    class SimpleEventProcessor : IEventProcessor
    {
      Stopwatch checkpointStopWatch;
    
      async Task IEventProcessor.CloseAsync(PartitionContext context, CloseReason reason)
      {
          Console.WriteLine("Processor Shutting Down. Partition '{0}', Reason: '{1}'.", context.Lease.PartitionId, reason);
          if (reason == CloseReason.Shutdown)
          {
              await context.CheckpointAsync();
          }
      }
    
      Task IEventProcessor.OpenAsync(PartitionContext context)
      {
          Console.WriteLine("SimpleEventProcessor initialized.  Partition: '{0}', Offset: '{1}'", context.Lease.PartitionId, context.Lease.Offset);
          this.checkpointStopWatch = new Stopwatch();
          this.checkpointStopWatch.Start();
          return Task.FromResult<object>(null);
      }
    
      async Task IEventProcessor.ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
      {
          foreach (EventData eventData in messages)
          {
              string data = Encoding.UTF8.GetString(eventData.GetBytes());
    
              Console.WriteLine(string.Format("Message received.  Partition: '{0}', Data: '{1}'",
                  context.Lease.PartitionId, data));
          }
    
          //Call checkpoint every 5 minutes, so that worker can resume processing from 5 minutes back if it restarts.
          if (this.checkpointStopWatch.Elapsed > TimeSpan.FromMinutes(5))
          {
              await context.CheckpointAsync();
              this.checkpointStopWatch.Restart();
          }
      }
    }
    

    Этот класс вызывается из EventProcessorHost для обработки событий, полученных от концентратора событий.This class is called by the EventProcessorHost to process events received from the event hub. В классе SimpleEventProcessor используется контрольный таймер для периодического вызова метода контрольных точек в контексте EventProcessorHost.The SimpleEventProcessor class uses a stopwatch to periodically call the checkpoint method on the EventProcessorHost context. Благодаря этому в случае перезагрузки получателя будет потеряно не более пяти минут обработки.This processing ensures that, if the receiver is restarted, it loses no more than five minutes of processing work.

Обновление метода Main для использования класса SimpleEventProcessorUpdate the Main method to use SimpleEventProcessor

  1. Добавьте в класс Program в начале файла следующую инструкцию using.In the Program class, add the following using statement at the top of the file:

    using Microsoft.ServiceBus.Messaging;
    
  2. Замените метод Main в классе Program следующим кодом. При этом укажите имя концентратора событий и сохраненную ранее строку подключения уровня пространства имен, а также учетную запись хранения и ключ, которые вы скопировали в предыдущих разделах.Replace the Main method in the Program class with the following code, substituting the event hub name and the namespace-level connection string that you saved previously, and the storage account and key that you copied in the previous sections.

    static void Main(string[] args)
    {
      string eventHubConnectionString = "{Event Hubs namespace connection string}";
      string eventHubName = "{Event Hub name}";
      string storageAccountName = "{storage account name}";
      string storageAccountKey = "{storage account key}";
      string storageConnectionString = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", storageAccountName, storageAccountKey);
    
      string eventProcessorHostName = Guid.NewGuid().ToString();
      EventProcessorHost eventProcessorHost = new EventProcessorHost(eventProcessorHostName, eventHubName, EventHubConsumerGroup.DefaultGroupName, eventHubConnectionString, storageConnectionString);
      Console.WriteLine("Registering EventProcessor...");
      var options = new EventProcessorOptions();
      options.ExceptionReceived += (sender, e) => { Console.WriteLine(e.Exception); };
      eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>(options).Wait();
    
      Console.WriteLine("Receiving. Press enter key to stop worker.");
      Console.ReadLine();
      eventProcessorHost.UnregisterEventProcessorAsync().Wait();
    }
    
  3. Запустите программу и убедитесь в отсутствии ошибок.Run the program, and ensure that there are no errors.

Дальнейшие действияNext steps

Ознакомьтесь со следующими статьями:Read the following articles: