Guida introduttiva alla ricezione di messaggi con Event Processor Host in .NET StandardGet started receiving messages with the Event Processor Host in .NET Standard

Nota

Questo esempio è disponibile in GitHub.This sample is available on GitHub.

Questa esercitazione illustra come scrivere un'applicazione console .NET Core che riceve messaggi da un hub eventi usando la libreria dell'host processore di eventi.This tutorial shows how to write a .NET Core console application that receives messages from an event hub by using the Event Processor Host library. È possibile eseguire la soluzione GitHub così com'è, sostituendo le stringhe con i valori dell'hub eventi e dell'account di archiviazione.You can run the GitHub solution as-is, replacing the strings with your event hub and storage account values. In alternativa, è possibile seguire la procedura illustrata in questa esercitazione per creare una soluzione propria.Or you can follow the steps in this tutorial to create your own.

PrerequisitiPrerequisites

Creare uno spazio dei nomi di Hub eventi e un hub eventiCreate an Event Hubs namespace and an event hub

Il primo passaggio consiste nell'usare il portale di Azure per creare uno spazio dei nomi per il tipo Hub eventi e ottenere le credenziali di gestione richieste dall'applicazione per comunicare con l'hub eventi.The first step is to use the Azure portal to create a namespace for the Event Hubs type, and obtain the management credentials that your application needs to communicate with the event hub. Per creare uno spazio dei nomi e un hub eventi, seguire la procedura descritta in questo articolo e quindi procedere con l'esercitazione.To create a namespace and event hub, follow the procedure in this article, and then proceed with this tutorial.

Creare un account di Archiviazione di AzureCreate an Azure Storage account

  1. Accedere al portale di Azure.Sign in to the Azure portal.
  2. Nel riquadro di spostamento sinistro del portale fare clic su Nuovo, quindi su Archiviazione e quindi su Account di archiviazione.In the left navigation pane of the portal, click New, click Storage, and then click Storage Account.
  3. Completare i campi nella finestra dell'account di archiviazione e quindi fare clic su Crea.Complete the fields in the storage account window, and then click Create.

    Crea account di archiviazione

  4. Dopo aver visualizzato il messaggio Le distribuzioni sono riuscite, fare clic sul nome del nuovo account di archiviazione.After you see the Deployments Succeeded message, click the name of the new storage account. Nella finestra Informazioni di base fare clic su BLOB.In the Essentials window, click Blobs. Quando viene visualizzata la finestra di dialogo Servizio BLOB, fare clic su + Contenitore in alto.When the Blob service dialog box opens, click + Container at the top. Assegnare un nome al contenitore e quindi chiudere Servizio BLOB.Give the container a name, and then close Blob service.

  5. Fare clic su Chiavi di accesso nella finestra a sinistra e copiare il nome del contenitore di archiviazione, l'account di archiviazione e il valore key1.Click Access keys in the left-hand window and copy the name of the storage container, the storage account, and the value of key1. Salvare questi valori nel Blocco note o in un'altra posizione temporanea.Save these values to Notepad or some other temporary location.

Creare un'applicazione consoleCreate a console application

Avviare Visual Studio.Start Visual Studio. Scegliere Nuovo dal menu File e quindi fare clic su Progetto.From the File menu, click New, and then click Project. Creare un'applicazione console di .NET Core.Create a .NET Core console application.

Nuovo progetto

Aggiungere il pacchetto NuGet di Hub eventiAdd the Event Hubs NuGet package

Aggiungere al progetto i pacchetti NuGet Microsoft.Azure.EventHubs e Microsoft.Azure.EventHubs.Processor della libreria .NET Standard seguendo questa procedura:Add the Microsoft.Azure.EventHubs and Microsoft.Azure.EventHubs.Processor .NET Standard library NuGet packages to your project by following these steps:

  1. Fare clic con il pulsante destro del mouse sul progetto appena creato e scegliere Gestisci pacchetti NuGet.Right-click the newly created project and select Manage NuGet Packages.
  2. Fare clic sulla scheda Sfoglia, cercare Microsoft.Azure.EventHubs e quindi selezionare il pacchetto Microsoft.Azure.EventHubs.Click the Browse tab, search for Microsoft.Azure.EventHubs, and then select the Microsoft.Azure.EventHubs package. Fare clic su Installa per completare l'installazione, quindi chiudere questa finestra di dialogo.Click Install to complete the installation, then close this dialog box.
  3. Ripetere i passaggi 1 e 2 e installare il pacchetto Microsoft.Azure.EventHubs.Processor.Repeat steps 1 and 2, and install the Microsoft.Azure.EventHubs.Processor package.

Implementare l'interfaccia IEventProcessorImplement the IEventProcessor interface

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, quindi scegliere Aggiungi e fare clic su Classe.In Solution Explorer, right-click the project, click Add, and then click Class. Assegnare il nome SimpleEventProcessor alla nuova classe.Name the new class SimpleEventProcessor.

  2. Aprire il file SimpleEventProcessor.cs e aggiungere le istruzioni using seguenti all'inizio del file.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. Implementare l'interfaccia IEventProcessor.Implement the IEventProcessor interface. Sostituire l'intero contenuto della classe SimpleEventProcessor con il codice seguente: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();
        }
    }
    

Scrivere un metodo console principale che usi la classe SimpleEventProcessor per ricevere i messaggiWrite a main console method that uses the SimpleEventProcessor class to receive messages

  1. Aggiungere le istruzioni using seguenti all'inizio del file 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. Aggiungere le costanti alla classe Program per la stringa di connessione dell'hub eventi, il nome dell'hub, il nome del contenitore dell'account di archiviazione, il nome dell'account di archiviazione e la chiave dell'account di archiviazione.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. Aggiungere il codice seguente, sostituendo i segnaposto con i relativi valori.Add the following code, replacing the placeholders with their corresponding values.

    private const string EhConnectionString = "{Event Hubs connection string}";
    private const string EhEntityPath = "{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. Aggiungere alla classe Program un nuovo metodo denominato MainAsync come da esempio seguente: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(
            EhEntityPath,
            PartitionReceiver.DefaultConsumerGroupName,
            EhConnectionString,
            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. Aggiungere la riga di codice seguente al metodo Main:Add the following line of code to the Main method:

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

    Ecco l'aspetto che avrà il file Program.cs:Here is what your Program.cs file should look like:

    namespace SampleEphReceiver
    {
    
        public class Program
        {
            private const string EhConnectionString = "{Event Hubs connection string}";
            private const string EhEntityPath = "{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(
                    EhEntityPath,
                    PartitionReceiver.DefaultConsumerGroupName,
                    EhConnectionString,
                    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. Eseguire il programma e assicurarsi che non siano presenti errori.Run the program, and ensure that there are no errors.

Congratulazioni.Congratulations! Sono stati appena ricevuti dei messaggi da un hub eventi usando l'host del processore di eventi.You have now received messages from an event hub by using the Event Processor Host.

Passaggi successiviNext steps

Per ulteriori informazioni su Hub eventi visitare i collegamenti seguenti:You can learn more about Event Hubs by visiting the following links: