빠른 시작: .NET Framework를 사용하여 Azure Event Hubs에서 이벤트 보내기 또는 받기Quickstart: Send events to or receive events from Azure Event Hubs using .NET Framework

Azure Event Hubs는 초당 수백만 개의 이벤트를 수신하여 처리할 수 있는 빅 데이터 스트리밍 플랫폼이자 이벤트 수집 서비스입니다.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는 분산된 소프트웨어와 디바이스에서 생성된 이벤트, 데이터 또는 원격 분석을 처리하고 저장할 수 있습니다.Event Hubs can process and store events, data, or telemetry produced by distributed software and devices. Event Hub로 전송된 데이터는 실시간 분석 공급자 또는 일괄 처리/스토리지 어댑터를 사용하여 변환하고 저장할 수 있습니다.Data sent to an event hub can be transformed and stored using any real-time analytics provider or batching/storage adapters. Event Hubs에 대한 자세한 개요는 Event Hubs 개요Event Hubs 기능을 참조하세요.For detailed overview of Event Hubs, see Event Hubs overview and Event Hubs features.

이 자습서에서는 C#에서 이벤트 허브와 이벤트를 주고 받는 .NET Framework 콘솔 애플리케이션을 만드는 방법을 보여줍니다.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 2019Microsoft Visual Studio 2019.
  • Event Hubs 네임스페이스 및 이벤트 허브 만들기Create an Event Hubs namespace and an event hub. 첫 번째 단계에서는 Azure Portal을 사용하여 Event Hubs 형식의 네임스페이스를 만들고 애플리케이션에서 Event Hub와 통신하는 데 필요한 관리 자격 증명을 얻습니다.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.

콘솔 애플리케이션 만들기

Event Hubs 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.

    Service Bus NuGet 패키지 설치

    Visual Studio는 Azure Service Bus 라이브러리 NuGet 패키지에 대한 참조를 다운로드, 설치 및 추가합니다.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. Program.cs 파일 위에 다음 using 문을 추가합니다.Add the following using statements at the top of the Program.cs file:

    using System.Threading;
    using Microsoft.ServiceBus.Messaging;
    
  2. Program 클래스에 다음 필드를 추가하고, 이전 섹션에서 만든 Event Hub 이름과 이전에 저장한 네임스페이스 수준 연결 문자열로 위치 지정자 값을 대체합니다.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. Azure Portal 이벤트 허브 페이지의 RootManageSharedAccessKey 아래 연결 문자열-기본 키에서 이벤트 허브의 연결 문자열을 복사할 수 있습니다.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);
        }
    }
    

    이 메서드는 200ms 지연과 함께 Event Hub에 이벤트를 지속적으로 보냅니다.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. 이벤트 프로세서 호스트는 영구적 검사점을 관리하여 Event Hubs의 이벤트 수신을 간소화하고 이러한 Event Hubs에서 병렬 수신하는 .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. 이벤트 프로세서 호스트를 사용하면 다른 노드에 호스트된 수신기를 비롯한 여러 수신기 간에 이벤트를 분할할 수 있습니다.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

이벤트 처리기 호스트는 영구적 검사점을 관리하여 Event Hubs의 이벤트 수신을 간소화하고 병렬 수신을 수행하는 지능형 에이전트입니다.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 Portal 화면의 왼쪽 위에서 리소스 만들기를 선택합니다.In the Azure portal, and select Create a resource at the top left of the screen.

  2. 스토리지를 선택한 다음, 스토리지 계정 - Blob, 파일, 테이블, 큐를 선택합니다.Select Storage, then select Storage account - blob, file, table, queue.

    Storage 계정 선택

  3. 스토리지 계정 만들기 페이지에서 다음 단계를 수행합니다.On the Create storage account page, take the following steps:

    1. 스토리지 계정의 이름을 입력합니다.Enter a name for the storage account.

    2. 이벤트 허브를 포함하는 Azure 구독을 선택합니다.Choose an Azure subscription that contains the event hub.

    3. 이벤트 허브가 있는 리소스 그룹을 선택합니다.Select the resource group that has the event hub.

    4. 리소스를 만들 위치를 선택합니다.Select a location in which to create the resource.

    5. 검토 + 만들기를 클릭합니다.Then click Review + create.

      스토리지 계정 만들기 - 페이지

  4. 검토 + 만들기 페이지에서 값을 검토하고 만들기를 선택합니다.On the Review + create page, review the values, and select Create.

    스토리지 계정 설정 검토 및 만들기

  5. 표시 되 면 합니다 배포 성공 메시지를 선택 리소스로 이동 페이지의 맨 위에 있는 합니다.After you see the Deployments Succeeded message, select Go to resource at the top of the page. 리소스 목록에서 스토리지 계정을 선택하여 [스토리지 계정] 페이지를 시작할 수도 있습니다.You can also launch the Storage Account page by selecting your storage account from the resource list.

    배포에서 스토리지 계정 선택

  6. Essentials 창에서 Blob을 선택합니다.In the Essentials window, select Blobs.

    Blob 서비스 선택

  7. 위쪽에서 + 컨테이너를 선택하고, 컨테이너에 대한 이름을 입력하고, 확인을 선택합니다.Select + Container at the top, enter a name for the container, and select OK.

    Blob 컨테이너 만들기

  8. 왼쪽 메뉴에서 액세스 키를 선택하고 key1의 값을 복사합니다.Select Access keys in the left-side 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. 프로젝트 이름을 Receiver로 지정합니다.Name the project Receiver.

콘솔 애플리케이션 만들기

Event Hubs NuGet 패키지 추가Add the Event Hubs NuGet package

  1. 솔루션 탐색기에서 Receiver 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 솔루션에 대한 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 Service Bus Event Hub - EventProcessorHost NuGet 패키지에 대한 참조 및 해당하는 모든 종속성을 다운로드, 설치 및 추가합니다.Visual Studio downloads, installs, and adds a reference to the Azure Service Bus Event Hub - EventProcessorHost NuGet package, with all its dependencies.

IEventProcessor 인터페이스 구현Implement the IEventProcessor interface

  1. Receiver 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가를 클릭한 후 클래스를 클릭합니다.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();
          }
      }
    }
    

    이 클래스는 Event Hub에서 받는 이벤트를 처리하기 위해 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. 이 처리로 인해 수신기가 다시 시작되는 경우 5분 이하의 처리 작업은 손실됩니다.This processing ensures that, if the receiver is restarted, it loses no more than five minutes of processing work.

SimpleEventProcessor를 사용하도록 Main 메서드 업데이트Update 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. Program 클래스의 Main 메서드를 다음 코드로 바꿉니다. 이 코드는 이전에 저장한 이벤트 허브 이름 및 네임스페이스 수준 연결 문자열과 이전 섹션에서 복사한 스토리지 계정 및 키를 대체합니다.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: