Senden von Ereignissen an oder Empfangen von Ereignissen aus Event Hubs mithilfe von .NET Core (Microsoft.Azure.EventHubs)Send events to or receive events from Azure Event Hubs using .NET Core (Microsoft.Azure.EventHubs)

In dieser Schnellstartanleitung erfahren Sie, wie Sie mithilfe der .NET Core-Bibliothek Microsoft.Azure.EventHubs Ereignisse an einen Event Hub senden bzw. von diesem empfangen.This quickstart shows how to send events to and receive events from an event hub using the Microsoft.Azure.EventHubs .NET Core library.

Warnung

In diesem Schnellstart wird das alte Microsoft.Azure.EventHubs-Paket verwendet.This quickstart uses the old Microsoft.Azure.EventHubs package. Eine Schnellstartanleitung, in der die neueste Azure.Messaging.EventHubs-Bibliothek verwendet wird, finden Sie unter Senden und Empfangen von Ereignissen mithilfe der Bibliothek „Azure.Messaging.EventHubs“.For a quickstart that uses the latest Azure.Messaging.EventHubs library, see Send and receive events using Azure.Messaging.EventHubs library. Informationen, wie sie Ihre Anwendung nicht mit der alten, sondern mit der neuen Bibliothek verwenden, finden Sie im Handbuch für die Migration von Microsoft.Azure.EventHubs zu Azure.Messaging.EventHubs.To move your application from using the old library to new one, see the Guide to migrate from Microsoft.Azure.EventHubs to Azure.Messaging.EventHubs.

VoraussetzungenPrerequisites

Wenn Sie mit Azure Event Hubs noch nicht vertraut sind, lesen Sie vor dem Durcharbeiten dieser Schnellstartanleitung die Informationen unter Übersicht über Event Hubs.If you are new to Azure Event Hubs, see Event Hubs overview before you do this quickstart.

Zum Durchführen dieser Schnellstartanleitung benötigen Sie Folgendes:To complete this quickstart, you need the following prerequisites:

  • Microsoft Azure-Abonnement.Microsoft Azure subscription. Für die Verwendung von Azure-Diensten benötigen Sie ein Abonnement. Das gilt auch für Azure Event Hubs.To use Azure services, including Azure Event Hubs, you need a subscription. Falls Sie noch nicht über ein Azure-Konto verfügen, können Sie sich für eine kostenlose Testversion registrieren oder beim Erstellen eines Kontos Ihre MSDN-Abonnentenvorteile nutzen.If you don't have an existing Azure account, you can sign up for a free trial or use your MSDN subscriber benefits when you create an account.
  • Microsoft Visual Studio 2019.Microsoft Visual Studio 2019.
  • .NET Core Visual Studio 2015- oder 2017-Tools..NET Core Visual Studio 2015 or 2017 tools.
  • 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. Sie verwenden die Verbindungszeichenfolge im weiteren Verlauf dieser Schnellstartanleitung.You use the connection string later in this quickstart.

Senden von EreignisseSend events

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

Hinweis

Sie können diese Schnellstartvorlage als Beispiel aus GitHub herunterladen, die Zeichenfolgen EventHubConnectionString und EventHubName durch die Werte für Ihren Event Hub ersetzen und das Beispiel dann ausführen.You can download this quickstart as a sample from the GitHub, replace EventHubConnectionString and EventHubName strings with your event hub values, and run it. Alternativ können Sie auch die Schritte in dieser Schnellstartanleitung ausführen, um eine eigene Vorlage zu erstellen.Alternatively, you can follow the steps in this quickstart to create your own.

Erstellen einer KonsolenanwendungCreate a console application

Starten Sie Visual Studio.Start Visual Studio. Klicken Sie im Menü Datei auf Neu und dann auf Projekt.From the File menu, click New, and then click Project. Erstellen Sie eine .NET Core-Konsolenanwendung.Create a .NET Core console application.

Neues Projekt

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

Führen Sie die folgenden Schritte aus, um Ihrem Projekt das NuGet-Paket der Microsoft.Azure.EventHubs .NET Core-Bibliothek hinzuzufügen:Add the Microsoft.Azure.EventHubs .NET Core library NuGet package to your project by following these steps:

  1. Klicken Sie mit der rechten Maustaste auf das neu erstellte Projekt, und wählen Sie NuGet-Pakete verwalten aus.Right-click the newly created project and select Manage NuGet Packages.
  2. Klicken Sie auf die Registerkarte Durchsuchen, und suchen Sie nach „Microsoft.Azure.EventHubs“. Wählen Sie anschließend das Paket Microsoft.Azure.EventHubs aus.Click the Browse tab, then search for "Microsoft.Azure.EventHubs" and select the Microsoft.Azure.EventHubs package. Klicken Sie auf Installieren, um die Installation abzuschließen. Schließen Sie danach dieses Dialogfeld.Click Install to complete the installation, then close this dialog box.

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 to the top of the Program.cs file:

    using Microsoft.Azure.EventHubs;
    using System.Text;
    using System.Threading.Tasks;
    
  2. Fügen Sie der Program-Klasse Konstanten für die Event Hubs-Verbindungszeichenfolge und den Event Hubs-Entitätspfad (einzelner Event Hub-Name) hinzu.Add constants to the Program class for the Event Hubs connection string and entity path (individual event hub name). Ersetzen Sie die Platzhalter in Klammern durch die entsprechenden Werte, die beim Erstellen des Event Hubs abgerufen wurden.Replace the placeholders in brackets with the proper values that were obtained when creating the event hub. Stellen Sie sicher, dass es sich bei {Event Hubs connection string} um die Verbindungszeichenfolge auf Namespaceebene und nicht um die Event Hub-Zeichenfolge handelt.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. Fügen Sie wie folgt eine neue Methode mit dem Namen MainAsync in die Program-Klasse ein: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. Fügen Sie wie folgt eine neue Methode mit dem Namen SendMessagesToEventHub in die Program-Klasse ein: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. Fügen Sie der Main-Methode in der Program-Klasse den folgenden Code hinzu:Add the following code to the Main method in the Program class:

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

    „Program.cs“ sollte nun wie folgt aussehen: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. 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 erfahren Sie, wie Sie eine .NET Core-Konsolenanwendung schreiben, die unter Verwendung des Ereignisprozessorhosts Nachrichten von einem Event Hub empfängt.This section shows how to write a .NET Core 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. Dieses Beispiel zeigt, wie der Ereignisprozessorhost für einen einzelnen Empfänger verwendet wird.This example shows how to use the Event Processor Host for a single receiver.

Hinweis

Sie können diese Schnellstartvorlage als Beispiel aus GitHub herunterladen, die Zeichenfolgen EventHubConnectionString, EventHubName, StorageAccountName, StorageAccountKey und StorageContainerName durch die Werte für Ihren Event Hub ersetzen, und das Beispiel dann ausführen.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. Alternativ können Sie auch die Schritte in diesem Tutorial ausführen, um eine eigene Vorlage zu erstellen.Alternatively, you can follow the steps in this tutorial to create your own.

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

Starten Sie Visual Studio.Start Visual Studio. Klicken Sie im Menü Datei auf Neu und dann auf Projekt.From the File menu, click New, and then click Project. Erstellen Sie eine .NET Core-Konsolenanwendung.Create a .NET Core console application.

Neues Projekt

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

Führen Sie die folgenden Schritte aus, um Ihrem Projekt das NuGet-Paket der .NET Standard-Bibliotheken Microsoft.Azure.EventHubs und Microsoft.Azure.EventHubs.Processor hinzuzufügen:Add the Microsoft.Azure.EventHubs and Microsoft.Azure.EventHubs.Processor .NET Standard library NuGet packages to your project by following these steps:

  1. Klicken Sie mit der rechten Maustaste auf das neu erstellte Projekt, und wählen Sie NuGet-Pakete verwalten aus.Right-click the newly created project and select Manage NuGet Packages.
  2. Klicken Sie auf die Registerkarte Durchsuchen, und suchen Sie nach Microsoft.Azure.EventHubs. Wählen Sie anschließend das Paket Microsoft.Azure.EventHubs aus.Click the Browse tab, search for Microsoft.Azure.EventHubs, and then select the Microsoft.Azure.EventHubs package. Klicken Sie auf Installieren, um die Installation abzuschließen. Schließen Sie danach dieses Dialogfeld.Click Install to complete the installation, then close this dialog box.
  3. Wiederholen Sie die Schritte 1 und 2, und installieren Sie das Paket Microsoft.Azure.EventHubs.Processor.Repeat steps 1 and 2, and install the Microsoft.Azure.EventHubs.Processor package.

Implementieren der IEventProcessor-SchnittstelleImplement the IEventProcessor interface

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und klicken Sie auf Hinzufügen und anschließend auf Klasse.In Solution Explorer, right-click the project, click Add, and then click Class. Nennen Sie die neue Klasse SimpleEventProcessor.Name the new class SimpleEventProcessor.

  2. Öffnen Sie die Datei „SimpleEventProcessor.cs“, und fügen Sie folgende using-Anweisung am Anfang der Datei ein.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. Implementieren Sie die IEventProcessor-Schnittstelle.Implement the IEventProcessor interface. Ersetzen Sie den gesamten Inhalt der Klasse SimpleEventProcessor durch folgenden Code: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();
        }
    }
    

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

  1. Fügen Sie am Anfang der Datei „Program.cs“ die folgenden using-Anweisungen hinzu: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. Fügen Sie der Program-Klasse Konstanten für die Event Hub-Verbindungszeichenfolge, den Event Hub-Namen, den Speicherkonto-Containernamen, den Speicherkontonamen und den Speicherkontoschlüssel hinzu.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. Fügen Sie folgenden Code ein, sodass die Platzhalter durch die entsprechenden Werte ersetzt werden: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. Fügen Sie wie folgt eine neue Methode mit dem Namen MainAsync in die Program-Klasse ein: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. Fügen Sie der Main-Methode die folgende Codezeile hinzu:Add the following line of code to the Main method:

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

    Die Datei „Program.cs“ sollte nun wie folgt aussehen: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. 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: