Schnellstart: Senden von Ereignissen an oder Empfangen von Ereignissen aus Event Hubs mithilfe von .NET FrameworkQuickstart: Send events to or receive events from Azure Event Hubs using .NET Framework

Azure Event Hubs ist eine Big Data-Streamingplattform und ein Ereigniserfassungsdienst, der pro Sekunde Millionen von Ereignissen empfangen und verarbeiten kann.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 kann Ereignisse, Daten oder Telemetriedaten, die von verteilter Software und verteilten Geräten erzeugt wurden, verarbeiten und speichern.Event Hubs can process and store events, data, or telemetry produced by distributed software and devices. An einen Event Hub gesendete Daten können transformiert und mit einem beliebigen Echtzeitanalyse-Anbieter oder Batchverarbeitungs-/Speicheradapter gespeichert werden.Data sent to an event hub can be transformed and stored using any real-time analytics provider or batching/storage adapters. Eine ausführliche Übersicht über Event Hubs finden Sie unter Was ist Azure Event Hubs? und Event Hubs-Features im Überblick.For detailed overview of Event Hubs, see Event Hubs overview and Event Hubs features.

In diesem Tutorial wird gezeigt, wie Sie .NET Framework-Konsolenanwendungen in C# erstellen, die Ereignisse an einen Event Hub senden oder von diesem empfangen.This tutorial shows how to create .NET Framework console applications in C# to send events to or receive events from an eventhub.

VoraussetzungenPrerequisites

Zum Durchführen dieses Tutorials benötigen Sie Folgendes:To complete this tutorial, you need the following prerequisites:

  • Microsoft Visual Studio 2019.Microsoft Visual Studio 2019.
  • Erstellen Sie einen Event Hubs-Namespace und einen Event Hub.Create an Event Hubs namespace and an event hub. Verwenden Sie zunächst das Azure-Portal, um einen Namespace vom Typ „Event Hubs“ zu erstellen, und beschaffen Sie die Verwaltungsanmeldeinformationen, die Ihre Anwendung für die Kommunikation mit dem Event Hub benötigt.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. Erstellen Sie anhand der Anleitung in diesem Artikel einen Namespace und einen Event Hub.To create a namespace and an event hub, follow the procedure in this article. Gehen Sie dann wie im folgenden Artikel beschrieben vor, um die Verbindungszeichenfolge für den Event Hub-Namespace abzurufen: Abrufen der Verbindungszeichenfolge.Then, get the connection string for the event hub namespace by following instructions from the article: Get connection string. Die Verbindungszeichenfolge wird im weiteren Verlauf dieses Tutorials benötigt.You use the connection string later in this tutorial.

Senden von EreignisseSend events

In diesem Abschnitt erfahren Sie, wie Sie eine .NET Framework-Anwendung zum Senden von Ereignissen an einen Event Hub erstellen.This section shows you how to create a .NET Framework console application to send events to an event hub.

Erstellen einer KonsolenanwendungCreate a console application

Erstellen Sie in Visual Studio mithilfe der Projektvorlage Konsolenanwendung ein neues Visual C#-Desktopanwendungsprojekt.In Visual Studio, create a new Visual C# Desktop App project using the Console Application project template. Geben Sie dem Projekt den Namen Sender.Name the project Sender.

Erstellen einer Konsolenanwendung

Hinzufügen des Event Hubs-NuGet-PaketsAdd the Event Hubs NuGet package

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Sender-Projekt, und klicken Sie dann auf NuGet-Pakete für Projektmappe verwalten.In Solution Explorer, right-click the Sender project, and then click Manage NuGet Packages for Solution.

  2. Klicken Sie auf die Registerkarte Durchsuchen, und suchen Sie nach WindowsAzure.ServiceBus.Click the Browse tab, then search for WindowsAzure.ServiceBus. Klicken Sie auf Installieren, und akzeptieren Sie die Nutzungsbedingungen.Click Install, and accept the terms of use.

    Installieren des Service Bus-NuGet-Pakets

    Visual Studio lädt das NuGet-Paket mit der Azure Service Bus-Bibliothekherunter, installiert es und fügt dem Projekt einen Verweis auf das Paket hinzu.Visual Studio downloads, installs, and adds a reference to the Azure Service Bus library NuGet package.

Schreiben von Code zum Senden von Nachrichten an den Event HubWrite code to send messages to the event hub

  1. Fügen Sie am Anfang der Datei Program.cs die folgenden using-Anweisungen hinzu:Add the following using statements at the top of the Program.cs file:

    using System.Threading;
    using Microsoft.ServiceBus.Messaging;
    
  2. Fügen Sie der Program-Klasse die folgenden Felder hinzu, und ersetzen Sie dabei die Platzhalterwerte durch den Namen des im vorigen Abschnitt erstellten Event Hubs und die zuvor gespeicherte Verbindungszeichenfolge auf Namespace-Ebene.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. Die Verbindungszeichenfolge für Ihren Event Hub können Sie im Azure-Portal auf der Event Hub-Seite unter RootManageSharedAccessKey aus Verbindungszeichenfolge – Primärschlüssel kopieren.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. Ausführliche Schritte finden Sie unter Abrufen der Verbindungszeichenfolge.For detailed steps, see Get connection string.

    static string eventHubName = "Your Event Hub name";
    static string connectionString = "namespace connection string";
    
  3. Fügen Sie der Program -Klasse die folgende Methode hinzu: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);
        }
    }
    

    Diese Methode sendet kontinuierlich Ereignisse mit einer Verzögerung von 200 ms an den Event Hub.This method continuously sends events to your event hub with a 200-ms delay.

  4. Fügen Sie abschließend der Main -Methode die folgenden Zeilen hinzu: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. Führen Sie das Programm aus, und stellen Sie sicher, dass keine Fehler auftreten.Run the program, and ensure that there are no errors.

Empfangen von EreignissenReceive events

In diesem Abschnitt schreiben Sie eine .NET Framework-Konsolenanwendung zum Empfangen von Nachrichten von einem Event Hub mithilfe des Ereignisprozessorhosts.In this section, you write a .NET Framework console application that receives messages from an event hub using the Event Processor Host. Der Ereignisprozessorhost ist eine .NET-Klasse, die das Empfangen von Ereignissen von Event Hubs durch die Verwaltung von permanenten Prüfpunkten und parallelen Empfangsvorgängen von diesen Event Hubs vereinfacht.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. Mit dem Ereignisprozessorhost können Sie Ereignisse selbst dann auf mehrere Empfänger aufteilen, wenn sie in verschiedenen Knoten gehostet werden.Using the Event Processor Host, you can split events across multiple receivers, even when hosted in different nodes.

Erstellen eines Speicherkontos für den EreignisprozessorhostCreate a storage account for Event Processor Host

Der Ereignisprozessorhost ist ein intelligenter Agent, mit dem das Empfangen von Ereignissen von Event Hubs vereinfacht wird, indem permanente Prüfpunkte und parallele Empfangsvorgänge verwaltet werden.The Event Processor Host is an intelligent agent that simplifies receiving events from Event Hubs by managing persistent checkpoints and parallel receives. Für das Setzen von Prüfpunkten benötigt der Ereignisprozessorhost ein Speicherkonto.For checkpointing, the Event Processor Host requires a storage account. Im folgenden Beispiel wird veranschaulicht, wie Sie ein Speicherkonto erstellen und die zugehörigen Zugriffsschlüssel beziehen:The following example shows how to create a storage account and how to get its keys for access:

  1. Wählen Sie im Menü des Azure-Portals die Option Ressource erstellen aus.From the Azure portal menu, select Create a resource.

    Erstellen eines Ressourcenmenüelements, Microsoft Azure-Portal

  2. Wählen Sie Storage > Speicherkonto aus.Select Storage > Storage account.

    Auswählen eines Speicherkontos, Microsoft Azure-Portal

  3. Führen Sie auf der Seite Speicherkonto erstellen die folgenden Schritte aus:On the Create storage account page, take the following steps:

    1. Geben Sie den Namen des Speicherkontos ein.Enter the Storage account name.

    2. Wählen Sie ein Azure-Abonnement aus, das den Event Hub enthält.Choose an Azure Subscription that contains the event hub.

    3. Wählen Sie die Ressourcengruppe aus, die den Event Hub enthält, oder erstellen Sie sie.Choose or create the Resource group that has the event hub.

    4. Wählen Sie einen Speicherort für die Erstellung der Ressource aus.Pick a Location in which to create the resource.

    5. Klicken Sie auf Überprüfen + erstellen.Select Review + create.

      Überprüfen + erstellen, Erstellen eines Speicherkontos, Microsoft Azure-Portal

  4. Überprüfen Sie auf der Seite Überprüfen + erstellen die Werte, und wählen Sie Erstellen aus.On the Review + create page, review the values, and select Create.

    Speicherkontoeinstellungen überprüfen und erstellen, Microsoft Azure-Portal

  5. Wenn die Meldung Bereitstellungen erfolgreich in Ihren Benachrichtigungen angezeigt wird, wählen Sie Zu Ressource wechseln aus, um die Seite „Speicherkonto“ zu öffnen.After you see the Deployments Succeeded message in your notifications, select Go to resource to open the Storage Account page. Alternativ können Sie Bereitstellungsdetails erweitern und dann die neue Ressource in der Ressourcenliste auswählen.Alternatively, you can expand Deployment details and then select your new resource from the resource list.

    Zu Ressource wechseln, Speicherkontobereitstellung, Microsoft Azure-Portal

  6. Wählen Sie Containeraus.Select Containers.

    Auswählen des Blobcontainerdiensts, Speicherkonten, Microsoft Azure-Portal

  7. Wählen Sie oben + Container aus, geben Sie einen Namen für den Container ein, und wählen Sie OK aus.Select + Container at the top, enter a Name for the container, and select OK.

    Erstellen eines neuen Blobcontainers, Speicherkonten, Microsoft Azure-Portal

  8. Wählen Sie im Menü der Seite Speicherkonto die Option Zugriffsschlüssel aus, und kopieren Sie den Wert von key1.Choose Access keys from the Storage account page menu, and copy the value of key1.

    Speichern Sie die folgenden Werte im Editor oder an einem anderen temporären Speicherort.Save the following values to Notepad or some other temporary location.

    • Name des SpeicherkontosName of the storage account
    • Zugriffsschlüssel für das SpeicherkontoAccess key for the storage account
    • Name des ContainersName of the container

Erstellen einer KonsolenanwendungCreate a console application

Erstellen Sie in Visual Studio mithilfe der Projektvorlage Konsolenanwendung ein neues Visual C#-Desktopanwendungsprojekt.In Visual Studio, create a new Visual C# Desktop App project using the Console Application project template. Geben Sie dem Projekt den Namen Receiver.Name the project Receiver.

Erstellen einer Konsolenanwendung

Hinzufügen des Event Hubs-NuGet-PaketsAdd the Event Hubs NuGet package

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Receiver-Projekt, und klicken Sie dann auf NuGet-Pakete für Projektmappe verwalten.In Solution Explorer, right-click the Receiver project, and then click Manage NuGet Packages for Solution.

  2. Klicken Sie auf die Registerkarte Durchsuchen, und suchen Sie nach Microsoft Azure Service Bus Event Hub - EventProcessorHost.Click the Browse tab, then search for Microsoft Azure Service Bus Event Hub - EventProcessorHost. Klicken Sie auf Installieren, und akzeptieren Sie die Nutzungsbedingungen.Click Install, and accept the terms of use.

    Suchen nach dem NuGet-Paket „EventProcessorHost“

    Visual Studio lädt das NuGet-Paket Azure Service Bus Event Hub – EventProcessorHostmit allen Abhängigkeiten herunter, installiert es und fügt dem Projekt einen Verweis auf das Paket hinzu.Visual Studio downloads, installs, and adds a reference to the Azure Service Bus Event Hub - EventProcessorHost NuGet package, with all its dependencies.

Implementieren der IEventProcessor-SchnittstelleImplement the IEventProcessor interface

  1. Klicken Sie mit der rechten Maustaste auf das Projekt Receiver, klicken Sie auf Hinzufügen und dann auf Klasse.Right-click the Receiver project, click Add, and then click Class. Geben Sie der neuen Klasse den Namen SimpleEventProcessor, und klicken Sie auf Hinzufügen, um die Klasse zu erstellen.Name the new class SimpleEventProcessor, and then click Add to create the class.

    Hinzufügen der SimpleEventProcessor-Klasse

  2. Fügen Sie die folgenden Anweisungen am Anfang der Datei "SimpleEventProcessor.cs" hinzu:Add the following statements at the top of the SimpleEventProcessor.cs file:

    using Microsoft.ServiceBus.Messaging;
    using System.Diagnostics;
    
  3. Ersetzen Sie den Text der Klasse durch folgenden Code: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();
          }
      }
    }
    

    Diese Klasse wird von EventProcessorHost zur Verarbeitung der vom Event Hub empfangenen Ereignisse aufgerufen.This class is called by the EventProcessorHost to process events received from the event hub. Die SimpleEventProcessor-Klasse verwendet eine Stoppuhr, um in regelmäßigen Abständen die „checkpoint“-Methode für den EventProcessorHost-Kontext aufzurufen.The SimpleEventProcessor class uses a stopwatch to periodically call the checkpoint method on the EventProcessorHost context. Dadurch wird sichergestellt, dass der Empfänger bei einem Neustart maximal nur die Daten verlieren kann, die in den letzten fünf Minuten verarbeitet wurden.This processing ensures that, if the receiver is restarted, it loses no more than five minutes of processing work.

Aktualisieren der Main-Methode zur Verwendung von „SimpleEventProcessor“Update the Main method to use SimpleEventProcessor

  1. Fügen Sie in der Program-Klasse die folgende using-Anweisungen am Anfang der Datei hinzu:In the Program class, add the following using statement at the top of the file:

    using Microsoft.ServiceBus.Messaging;
    
  2. Überschreiben Sie die Main-Methode in der Program-Klasse mit dem folgenden Code. Ersetzen Sie dabei den Event Hub-Namen und die zuvor gespeicherte Verbindungszeichenfolge auf Namespace-Ebene sowie das Speicherkonto und den Speicherschlüssel, die Sie in den vorherigen Abschnitten kopiert haben.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. Führen Sie das Programm aus, und stellen Sie sicher, dass keine Fehler auftreten.Run the program, and ensure that there are no errors.

Nächste SchritteNext steps

Lesen Sie die folgenden Artikel:Read the following articles: