Guida introduttiva alla ricezione di messaggi con Event Processor Host in .NET Standard

Nota

Questo esempio è disponibile in GitHub.

In questa esercitazione viene illustrata la procedura per scrivere un'applicazione console .NET Core per ricevere messaggi da un hub eventi usando EventProcessorHost. È possibile eseguire la soluzione GitHub così com'è, sostituendo le stringhe con i valori dell'hub eventi e dell'account di archiviazione. In alternativa, è possibile seguire la procedura illustrata in questa esercitazione per creare una soluzione propria.

Prerequisiti

Creare uno spazio dei nomi di Hub eventi e un hub eventi

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. Per creare uno spazio dei nomi e un hub eventi, seguire la procedura descritta in questo articolo e procedere con i passaggi seguenti.

Creare un account di archiviazione di Azure

  1. Accedere al portale di Azure.
  2. Nel riquadro di spostamento sinistro del portale fare clic su Nuovo, quindi su Archiviazione e quindi su Account di archiviazione.
  3. Completare i campi nel pannello dell'account di archiviazione e quindi fare clic su Crea.

    Crea account di archiviazione

  4. Dopo aver visualizzato il messaggio Le distribuzioni sono riuscite, fare clic sul nome del nuovo account di archiviazione. Nel pannello Informazioni di base fare clic su BLOB. Quando si apre il pannello Servizio BLOB, fare clic su + Contenitore in alto. Assegnare un nome al contenitore, quindi chiudere il pannello Servizio BLOB.

  5. Fare clic su Chiavi di accesso nel pannello a sinistra e copiare il nome del contenitore di archiviazione, dell'account di archiviazione e il valore key1. Salvare questi valori nel Blocco note o in un'altra posizione temporanea.

Creare un'applicazione console

Avviare Visual Studio. Scegliere Nuovo dal menu File e quindi fare clic su Progetto. Creare un'applicazione console di .NET Core.

Nuovo progetto

Aggiungere il pacchetto NuGet di Hub eventi

Aggiungere i pacchetti NuGet della raccolta .NET standard Microsoft.Azure.EventHubs e Microsoft.Azure.EventHubs.Processor al progetto eseguendo i passaggi descritti di seguito:

  1. Fare clic con il pulsante destro del mouse sul progetto appena creato e scegliere Gestisci pacchetti NuGet.
  2. Fare clic sulla scheda Sfoglia, quindi cercare "Microsoft.Azure.EventHubs" e selezionare il pacchetto Microsoft.Azure.EventHubs. Fare clic su Installa per completare l'installazione, quindi chiudere questa finestra di dialogo.
  3. Ripetere i passaggi 1 e 2 e installare il pacchetto Microsoft.Azure.EventHubs.Processor.

Implementare l'interfaccia IEventProcessor

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, quindi scegliere Aggiungi e fare clic su Classe. Assegnare il nome SimpleEventProcessor alla nuova classe.

  2. Aprire il file SimpleEventProcessor.cs e aggiungere le istruzioni using seguenti all'inizio del file.

    using Microsoft.Azure.EventHubs;
    using Microsoft.Azure.EventHubs.Processor;
    using System.Threading.Tasks;
    
  3. Implementare l'interfaccia IEventProcessor. Sostituire l'intero contenuto della classe SimpleEventProcessor con il codice seguente:

    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 messaggi

  1. Aggiungere le istruzioni using seguenti all'inizio del file Program.cs.

    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. Aggiungere il codice seguente, sostituendo i segnaposto con i relativi valori.

    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:

    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:

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

    Ecco l'aspetto che avrà il file Program.cs:

    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.

Congratulazioni. Sono stati appena ricevuti dei messaggi da un hub eventi usando l'host del processore di eventi.

Passaggi successivi

Per ulteriori informazioni su Hub eventi visitare i collegamenti seguenti: