Envoyer ou recevoir des événements vers/depuis Azure Event Hubs à l'aide de .NET Core (Microsoft.Azure.EventHubs)Send events to or receive events from Azure Event Hubs using .NET Core (Microsoft.Azure.EventHubs)

Ce guide de démarrage rapide montre comment recevoir des événements d’un hub d’événements et lui en envoyer à l’aide de la bibliothèque .NET Core Microsoft.Azure.EventHubs.This quickstart shows how to send events to and receive events from an event hub using the Microsoft.Azure.EventHubs .NET Core library.

Warning

Ce guide de démarrage rapide utilise l'ancien package Microsoft.Azure.EventHubs.This quickstart uses the old Microsoft.Azure.EventHubs package. Pour obtenir un guide de démarrage rapide qui utilise la bibliothèque Azure.Messaging.EventHubs la plus récente, consultez Envoyer et recevoir des événements à l’aide de la bibliothèque Azure.Messaging.EventHubs.For a quickstart that uses the latest Azure.Messaging.EventHubs library, see Send and receive events using Azure.Messaging.EventHubs library. Pour migrer votre application de l’ancienne bibliothèque vers la nouvelle, consultez Guide to migrate from Microsoft.Azure.EventHubs to 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.

PrérequisPrerequisites

Si vous débutez avec Azure Event Hubs, consultez la vue d’ensemble d’Event Hubs avant de suivre ce guide de démarrage rapide.If you are new to Azure Event Hubs, see Event Hubs overview before you do this quickstart.

Pour effectuer ce démarrage rapide, vous avez besoin de ce qui suit :To complete this quickstart, you need the following prerequisites:

  • Abonnement Microsoft Azure.Microsoft Azure subscription. Pour utiliser les services Azure, y compris Azure Event Hubs, vous avez besoin d’un abonnement.To use Azure services, including Azure Event Hubs, you need a subscription. Si vous n’avez pas de compte Azure, vous pouvez vous inscrire à un essai gratuit ou utiliser les avantages de votre abonnement MSDN quand vous créez un compte.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.
  • Outils Visual Studio 2015 ou 2017 .NET Core..NET Core Visual Studio 2015 or 2017 tools.
  • Créez un espace de noms Event Hubs et un Event Hub.Create an Event Hubs namespace and an event hub. La première étape consiste à utiliser le portail Azure pour créer un espace de noms de type Event Hubs et obtenir les informations de gestion nécessaires à votre application pour communiquer avec le concentrateur d’événements.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. Pour créer un espace de noms et un hub d’événements, suivez la procédure décrite dans cet article.To create a namespace and an event hub, follow the procedure in this article. Ensuite, obtenez la chaîne de connexion de l’espace de noms Event Hub en suivant les instructions à partir de l’article : Obtenir la chaîne de connexion.Then, get the connection string for the event hub namespace by following instructions from the article: Get connection string. Vous utiliserez la chaîne de connexion plus loin dans ce guide de démarrage rapide.You use the connection string later in this quickstart.

Envoyer des événementsSend events

Cette section montre comment créer une application console .NET Core pour envoyer des événements à un hub d’événements.This section shows you how to create a .NET Core console application to send events to an event hub.

Note

Vous pouvez télécharger ce guide de démarrage rapide sous forme d’exemple depuis GitHub, remplacer les chaînes EventHubConnectionString et EventHubName par les valeurs de votre hub d’événements, puis l’exécuter.You can download this quickstart as a sample from the GitHub, replace EventHubConnectionString and EventHubName strings with your event hub values, and run it. Vous pouvez également suivre les étapes de ce guide de démarrage rapide pour créer le vôtre.Alternatively, you can follow the steps in this quickstart to create your own.

Création d’une application consoleCreate a console application

Démarrez Visual Studio.Start Visual Studio. Dans le menu Fichier, cliquez sur Nouveau, puis sur Projet.From the File menu, click New, and then click Project. Créez une application console .NET Core.Create a .NET Core console application.

Nouveau projet

Ajout du package NuGet Event HubsAdd the Event Hubs NuGet package

Ajoutez le package NuGet de bibliothèque .NET Core Microsoft.Azure.EventHubs à votre projet en procédant comme suit :Add the Microsoft.Azure.EventHubs .NET Core library NuGet package to your project by following these steps:

  1. Cliquez avec le bouton droit sur le projet créé et sélectionnez Gérer les packages NuGet.Right-click the newly created project and select Manage NuGet Packages.
  2. Cliquez sur l’onglet Parcourir, puis recherchez « Microsoft.Azure.EventHubs » et sélectionnez le package Microsoft.Azure.EventHubs.Click the Browse tab, then search for "Microsoft.Azure.EventHubs" and select the Microsoft.Azure.EventHubs package. Cliquez sur Installer pour terminer l’installation, puis fermez cette boîte de dialogue.Click Install to complete the installation, then close this dialog box.

Écriture de code pour envoyer des messages à un hub d’événementsWrite code to send messages to the event hub

  1. Ajoutez les instructions using ci-après en haut du fichier Program.cs :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. Ajoutez des constantes à la classe Program pour le chemin de l’entité et la chaîne de connexion Event Hubs (nom du concentrateur d’événements individuel).Add constants to the Program class for the Event Hubs connection string and entity path (individual event hub name). Remplacez les espaces réservés entre crochets par les valeurs appropriées obtenues lors de la création du concentrateur d’événements.Replace the placeholders in brackets with the proper values that were obtained when creating the event hub. Vérifiez que {Event Hubs connection string} est la chaîne de connexion au niveau de l’espace de noms, et pas la chaîne de concentrateur d’événements.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. Ajoutez une nouvelle méthode nommée MainAsync à la classe Program, comme suit :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. Ajoutez une nouvelle méthode nommée SendMessagesToEventHub à la classe Program, comme suit :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. Ajoutez le code suivant à la méthode Main dans la classe Program :Add the following code to the Main method in the Program class:

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

    Voici à quoi doit ressembler votre fichier Program.cs.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. Exécutez le programme et assurez-vous qu’il n’y a aucune erreur.Run the program, and ensure that there are no errors.

Recevoir des événementsReceive events

Cette section explique comment écrire une application console .NET Core qui reçoit des messages d’un hub d’événements à l’aide de l’Hôte du processeur d’événements.This section shows how to write a .NET Core console application that receives messages from an event hub using the Event Processor Host. L’hôte du processeur d’événements est une classe .NET qui simplifie la réception d’événements provenant de concentrateurs d’événements grâce à la gestion des points de contrôle permanents et des réceptions en parallèle de ces concentrateurs d’événements.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. L’hôte du processeur d’événements vous permet de répartir des événements sur plusieurs récepteurs, même quand ils sont hébergés dans des nœuds différents.Using the Event Processor Host, you can split events across multiple receivers, even when hosted in different nodes. Cet exemple illustre l’utilisation de l’hôte du processeur d’événements pour un récepteur unique.This example shows how to use the Event Processor Host for a single receiver.

Note

Vous pouvez télécharger ce démarrage rapide sous forme d’exemple depuis GitHub, remplacer EventHubConnectionString et EventHubName, StorageAccountName, StorageAccountKey, ainsi que les chaînes StorageContainerName par vos valeurs d’Event Hub, puis l’exécuter.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. Ou, vous pouvez suivre les étapes de ce didacticiel pour créer le vôtre.Alternatively, you can follow the steps in this tutorial to create your own.

Créer un compte de stockage pour Event Processor HostCreate a storage account for Event Processor Host

Event Processor Host est un agent intelligent qui simplifie la réception d’événements provenant d’Event Hubs en gérant les points de contrôle persistants et les destinataires parallèles.The Event Processor Host is an intelligent agent that simplifies receiving events from Event Hubs by managing persistent checkpoints and parallel receives. Pour les points de contrôle, Event Processor Host nécessite un compte de stockage.For checkpointing, the Event Processor Host requires a storage account. L’exemple suivant montre comment créer un compte de stockage et comment obtenir ses clés pour l’accès :The following example shows how to create a storage account and how to get its keys for access:

  1. Dans le menu du Portail Azure, sélectionnez Créer une ressource.From the Azure portal menu, select Create a resource.

    Élément de menu Créer une ressource, portail Microsoft Azure

  2. Sélectionnez Stockage > Compte de stockage.Select Storage > Storage account.

    Sélectionner Compte de stockage, portail Microsoft Azure

  3. Sur la page Créer un compte de stockage, procédez comme suit :On the Create storage account page, take the following steps:

    1. Entrez le nom du compte de stockage.Enter the Storage account name.

    2. Choisissez un abonnement Azure qui contient le hub d’événements.Choose an Azure Subscription that contains the event hub.

    3. Choisissez ou créez le groupe de ressources qui contient le hub d’événements.Choose or create the Resource group that has the event hub.

    4. Choisissez l’emplacement dans lequel stocker la ressource.Pick a Location in which to create the resource.

    5. Sélectionnez Revoir + créer.Select Review + create.

      Vérifier + créer, Créer un compte de stockage, portail Microsoft Azure

  4. Sur la page Vérifier + créer, vérifiez les valeurs, puis sélectionnez Créer.On the Review + create page, review the values, and select Create.

    Vérifier les paramètres de compte de stockage et créer, portail Microsoft Azure

  5. Une fois le message Déploiements réussis affiché dans vos notifications, sélectionnez Accéder à la ressource pour ouvrir la page Compte de stockage.After you see the Deployments Succeeded message in your notifications, select Go to resource to open the Storage Account page. Vous pouvez aussi développer Détails du déploiement et sélectionner ensuite votre nouvelle ressource dans la liste des ressources.Alternatively, you can expand Deployment details and then select your new resource from the resource list.

    Accéder à la ressource, déploiement de compte de stockage, portail Microsoft Azure

  6. Sélectionnez Conteneurs.Select Containers.

    Sélectionner le service de conteneur Objets Blob, comptes de stockage, portail Microsoft Azure

  7. Sélectionnez + Conteneur en haut, entrez le nom du conteneur, puis sélectionnez OK.Select + Container at the top, enter a Name for the container, and select OK.

    Créer un conteneur d’objets blob, comptes de stockage, portail Microsoft Azure

  8. Choisissez Clés d’accès dans le menu de la page Compte de stockage, puis copiez la valeur de key1.Choose Access keys from the Storage account page menu, and copy the value of key1.

    Enregistrez les valeurs suivantes dans le Bloc-notes ou un autre emplacement temporaire.Save the following values to Notepad or some other temporary location.

    • Nom du compte de stockageName of the storage account
    • Clé d’accès au compte de stockageAccess key for the storage account
    • Nom du conteneurName of the container

Création d’une application consoleCreate a console application

Démarrez Visual Studio.Start Visual Studio. Dans le menu Fichier, cliquez sur Nouveau, puis sur Projet.From the File menu, click New, and then click Project. Créez une application console .NET Core.Create a .NET Core console application.

Nouveau projet

Ajout du package NuGet Event HubsAdd the Event Hubs NuGet package

Ajoutez les packages NuGet de la bibliothèque .NET Standard Microsoft.Azure.EventHubs et Microsoft.Azure.EventHubs.Processor à votre projet en effectuant les étapes suivantes :Add the Microsoft.Azure.EventHubs and Microsoft.Azure.EventHubs.Processor .NET Standard library NuGet packages to your project by following these steps:

  1. Cliquez avec le bouton droit sur le projet créé et sélectionnez Gérer les packages NuGet.Right-click the newly created project and select Manage NuGet Packages.
  2. Cliquez sur l’onglet Parcourir, recherchez Microsoft.Azure.EventHubs, puis sélectionnez le package Microsoft.Azure.EventHubs.Click the Browse tab, search for Microsoft.Azure.EventHubs, and then select the Microsoft.Azure.EventHubs package. Cliquez sur Installer pour terminer l’installation, puis fermez cette boîte de dialogue.Click Install to complete the installation, then close this dialog box.
  3. Répétez les étapes 1 et 2 et installez le package Microsoft.Azure.EventHubs.Processor.Repeat steps 1 and 2, and install the Microsoft.Azure.EventHubs.Processor package.

Implémentation de l’interface IEventProcessorImplement the IEventProcessor interface

  1. Dans l’Explorateur de solutions, cliquez sur Ajouter, puis sur Classe.In Solution Explorer, right-click the project, click Add, and then click Class. Nommez la nouvelle classe SimpleEventProcessor.Name the new class SimpleEventProcessor.

  2. Ouvrez le fichier SimpleEventProcessor.cs et ajoutez les instructions using suivantes au début du fichier.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. Implémentez l'interface IEventProcessor.Implement the IEventProcessor interface. Remplacez tout le contenu de la classe SimpleEventProcessor par le code suivant :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();
        }
    }
    

Mettre à jour la méthode Main pour utiliser SimpleEventProcessorUpdate the Main method to use SimpleEventProcessor

  1. Ajoutez les instructions using ci-après en haut du fichier Program.cs.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. Ajoutez des constantes à la classe Program pour la chaîne de connexion du concentrateur d’événements, le nom du concentrateur d’événements, le nom du conteneur de compte de stockage, le nom du compte de stockage et la clé du compte de stockage.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. Ajoutez le code suivant, en remplaçant les espaces réservés par les valeurs correspondantes.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. Ajoutez une nouvelle méthode nommée MainAsync à la classe Program, comme suit :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. Ajoutez la ligne de code suivante à la méthode Main :Add the following line of code to the Main method:

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

    Voici à quoi doit ressembler votre fichier Program.cs :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. Exécutez le programme et assurez-vous qu’il n’y a aucune erreur.Run the program, and ensure that there are no errors.

Étapes suivantesNext steps

Consultez les articles suivants :Read the following articles: