Guida introduttiva: Inviare e ricevere eventi da Hub eventi di Azure tramite .NET
In questa guida introduttiva si apprenderà come inviare eventi a un hub eventi e quindi ricevere tali eventi dall'hub eventi usando la libreria .NET Azure.Messaging.EventHubs .
Nota
Le guide di avvio rapido consentono di aumentare rapidamente il servizio. Se si ha già familiarità con il servizio, è possibile visualizzare esempi .NET per Hub eventi nel repository .NET SDK in GitHub: esempi di Hub eventi in GitHub, esempi del processore di eventi in GitHub.
Prerequisiti
Se non si ha familiarità con Hub eventi di Azure, vedere Panoramica di Hub eventi prima di seguire questa guida introduttiva.
Per completare questa guida introduttiva è necessario soddisfare i prerequisiti seguenti:
- Sottoscrizione di Microsoft Azure. Per usare i servizi di Azure, tra cui Hub eventi di Azure, è necessaria una sottoscrizione. Se non si ha un account Azure, è possibile iscriversi per ottenere una versione di valutazione gratuita oppure usare i vantaggi della sottoscrizione di MSDN per la creazione di un account.
- Microsoft Visual Studio 2022. La libreria client di Hub eventi di Azure usa le nuove funzionalità introdotte in C# 8.0. È comunque possibile usare la libreria con le versioni precedenti del linguaggio C#, ma la nuova sintassi non sarà disponibile. Per usare la sintassi completa, è consigliabile compilare con .NET Core SDK 3.0 o versione successiva e la versione del linguaggio impostata su
latest
. Se si usa Visual Studio, le versioni precedenti a Visual Studio 2022 non sono compatibili con gli strumenti necessari per compilare progetti C# 8.0. Visual Studio 2022, inclusa l'edizione Community gratuita, può essere scaricato qui. - 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 di Hub eventi e un hub eventi nello spazio dei nomi . Ottenere quindi le credenziali di gestione necessarie all'applicazione per comunicare con l'hub eventi. Per creare uno spazio dei nomi e un hub eventi, vedere Avvio rapido: Creare un hub eventi usando portale di Azure.
Autenticare l'app in Azure
Questa guida introduttiva illustra due modi per connettersi a Hub eventi di Azure:
- Senza password (autenticazione di Microsoft Entra)
- Stringa di connessione
La prima opzione illustra come usare l'entità di sicurezza in Azure Active Directory e il controllo degli accessi in base al ruolo per connettersi a uno spazio dei nomi di Hub eventi. Non è necessario preoccuparsi di avere stringa di connessione hardcoded nel codice o in un file di configurazione o in un'archiviazione sicura come Azure Key Vault.
La seconda opzione mostra come usare un stringa di connessione per connettersi a uno spazio dei nomi di Hub eventi. Se non si ha familiarità con Azure, è possibile trovare l'opzione stringa di connessione più semplice da seguire. È consigliabile usare l'opzione senza password in applicazioni e ambienti di produzione reali. Per altre informazioni, consultare Autenticazione e autorizzazione. Per altre informazioni sull'autenticazione senza password, vedere la pagina di panoramica.
Assegnare ruoli all'utente di Microsoft Entra
Quando si sviluppa in locale, assicurarsi che l'account utente che si connette a Hub eventi di Azure disponga delle autorizzazioni corrette. Per inviare e ricevere messaggi, è necessario il ruolo di proprietario dei dati Hub eventi di Azure. Per assegnare a se stessi questo ruolo, è necessario il ruolo Amministratore accesso utenti o un altro ruolo che include l'azione Microsoft.Authorization/roleAssignments/write
. È possibile assegnare ruoli controllo degli accessi in base al ruolo di Azure a un utente usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell. Altre informazioni sugli ambiti disponibili per le assegnazioni di ruolo sono disponibili nella pagina panoramica dell'ambito .
L'esempio seguente assegna il Azure Event Hubs Data Owner
ruolo all'account utente, che fornisce l'accesso completo alle risorse di Hub eventi di Azure. In uno scenario reale, seguire il Principio dei privilegi minimi per concedere agli utenti solo le autorizzazioni minime necessarie per un ambiente di produzione più sicuro.
Ruoli predefiniti di Azure per Hub eventi di Azure
Per Hub eventi di Azure, la gestione degli spazi dei nomi e di tutte le risorse correlate tramite il portale di Azure e l'API di gestione delle risorse di Azure è già protetta usando il modello di controllo degli accessi in base al ruolo di Azure. Azure offre i ruoli predefiniti di Azure seguenti per autorizzare l'accesso a uno spazio dei nomi di Hub eventi:
- Hub eventi di Azure Proprietario dati: consente l'accesso ai dati allo spazio dei nomi di Hub eventi e alle relative entità (code, argomenti, sottoscrizioni e filtri)
- Hub eventi di Azure Mittente dati: usare questo ruolo per concedere al mittente l'accesso allo spazio dei nomi di Hub eventi e alle relative entità.
- Hub eventi di Azure Ricevitore dati: usare questo ruolo per concedere al ricevitore l'accesso allo spazio dei nomi di Hub eventi e alle relative entità.
Per creare un ruolo personalizzato, vedere Diritti necessari per le operazioni di Hub eventi.
Importante
Nella maggior parte dei casi, la propagazione dell'assegnazione di ruolo in Azure richiederà almeno due minuti. In rari casi, possono essere necessari fino a otto minuti. Se si ricevono errori di autenticazione quando si esegue il codice per la prima volta, attendere alcuni istanti e riprovare.
Nella portale di Azure individuare lo spazio dei nomi di Hub eventi usando la barra di ricerca principale o lo spostamento a sinistra.
Nella pagina di panoramica selezionare Controllo di accesso (IAM) nel menu a sinistra.
Nella pagina Controllo di accesso (IAM), selezionare la scheda Assegnazioni di ruolo.
Selezionare + Aggiungi dal menu in alto e quindi Aggiungi assegnazione di ruolo dal menu a discesa risultante.
Usare la casella di ricerca per filtrare i risultati in base al ruolo desiderato. Per questo esempio, cercare
Azure Event Hubs Data Owner
e selezionare il risultato corrispondente. Scegliere quindi Avanti.In Assegna accesso a selezionare Utente, gruppo o entità servizio e quindi scegliere + Seleziona membri.
Nella finestra di dialogo cercare il nome utente di Microsoft Entra (in genere l'indirizzo di posta elettronica user@domain) e quindi scegliere Selezionare nella parte inferiore della finestra di dialogo.
Selezionare Rivedi e assegna per passare alla pagina finale e quindi Rivedi e assegna di nuovo per completare il processo.
Avviare Visual Studio e accedere ad Azure
È possibile autorizzare l'accesso allo spazio dei nomi del Bus di servizio seguendo questa procedura:
Avviare Visual Studio. Se viene visualizzata la finestra Attività iniziali, selezionare il collegamento Continua senza codice nel riquadro destro.
Selezionare il pulsante Accedi in alto a destra in Visual Studio.
Accedere usando l'account Microsoft Entra a cui è stato assegnato un ruolo in precedenza.
Inviare eventi all'hub eventi
Questa sezione illustra come creare un'applicazione console .NET Core per inviare eventi all'hub eventi creato.
Creare un'applicazione console
Se Visual Studio 2022 è già aperto, selezionare File dal menu, selezionare Nuovo e quindi Progetto. In caso contrario, avviare Visual Studio 2022 e selezionare Crea un nuovo progetto se viene visualizzata una finestra popup.
Nella finestra di dialogo Crea un nuovo progetto seguire questa procedura: se non viene visualizzata questa finestra di dialogo, selezionare File dal menu, selezionare Nuovoe quindi selezionare Progetto.
Selezionare C# come linguaggio di programmazione.
Selezionare Console come tipo di applicazione.
Selezionare Applicazione console nell'elenco dei risultati.
Quindi seleziona Avanti.
Immettere EventHubsSender come nome del progetto, EventHubsQuickStart per il nome della soluzione e quindi selezionare Avanti.
Nella pagina Informazioni addizionali selezionare Crea.
Aggiungere i pacchetti NuGet al progetto
Scegliere Strumenti>Gestione pacchetti NuGet>Console di Gestione pacchetti dal menu.
Eseguire i comandi seguenti per installare i pacchetti NuGet Azure.Messaging.EventHubs e Azure.Identity . Premere INVIO per eseguire il secondo comando.
Install-Package Azure.Messaging.EventHubs Install-Package Azure.Identity
Scrivere codice per inviare eventi all'hub eventi
Sostituire il codice esistente nel
Program.cs
file con il codice di esempio seguente. Sostituire quindi e<HUB_NAME>
impostare<EVENT_HUB_NAMESPACE>
i valori segnaposto per iEventHubProducerClient
parametri con i nomi dello spazio dei nomi di Hub eventi e dell'hub eventi. Ad esempio:"spehubns0309.servicebus.windows.net"
e"spehub"
.Ecco i passaggi importanti del codice:
- Crea un oggetto EventHubProducerClient usando lo spazio dei nomi e il nome dell'hub eventi.
- Richiama il metodo CreateBatchAsync nell'oggetto EventHubProducerClient per creare un oggetto EventDataBatch .
- Aggiungere eventi al batch usando il metodo EventDataBatch.TryAdd .
- Invia il batch di messaggi all'hub eventi usando il metodo EventHubProducerClient.SendAsync .
using Azure.Identity; using Azure.Messaging.EventHubs; using Azure.Messaging.EventHubs.Producer; using System.Text; // number of events to be sent to the event hub int numOfEvents = 3; // The Event Hubs client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when events are being published or read regularly. // TODO: Replace the <EVENT_HUB_NAMESPACE> and <HUB_NAME> placeholder values EventHubProducerClient producerClient = new EventHubProducerClient( "<EVENT_HUB_NAMESPACE>.servicebus.windows.net", "<HUB_NAME>", new DefaultAzureCredential()); // Create a batch of events using EventDataBatch eventBatch = await producerClient.CreateBatchAsync(); for (int i = 1; i <= numOfEvents; i++) { if (!eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes($"Event {i}")))) { // if it is too large for the batch throw new Exception($"Event {i} is too large for the batch and cannot be sent."); } } try { // Use the producer client to send the batch of events to the event hub await producerClient.SendAsync(eventBatch); Console.WriteLine($"A batch of {numOfEvents} events has been published."); Console.ReadLine(); } finally { await producerClient.DisposeAsync(); }
Compilare il progetto e assicurarsi che non siano presenti errori.
Eseguire il programma e attendere il messaggio di conferma.
A batch of 3 events has been published.
Nota
Se viene visualizzato un errore "InvalidIssuer: l'autorità di certificazione del token non è valida" quando si usa l'autenticazione Microsoft Entra, è possibile che venga usato l'ID tenant Entra errato. Nel codice sostituire 'new DefaultAzureCredential()' con 'new DefaultAzureCredential(new DefaultAzureCredentialOptions {TenantId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"})" per specificare esplicitamente Entra Tenant ID.
Importante
Se si usa l'autenticazione basata su Controllo di accesso ruoli di Azure Active Directory (Senza password), selezionare Strumenti e quindi opzioni. Nella finestra Opzioni espandere Autenticazione del servizio di Azure e selezionare Selezione account. Verificare di usare l'account aggiunto al ruolo proprietario dati Hub eventi di Azure nello spazio dei nomi di Hub eventi.
Nella pagina Spazio dei nomi di Hub eventi nella portale di Azure vengono visualizzati tre messaggi in arrivo nel grafico Messaggi. Aggiornare la pagina per aggiornare il grafico, se necessario. La conferma che i messaggi sono stati ricevuti potrebbe comparire dopo alcuni secondi.
Nota
Per il codice sorgente completo con commenti più informativi, vedere questo file in GitHub
Ricevere eventi dall'hub eventi
Questa sezione illustra come scrivere un'applicazione console .NET Core che riceve eventi da un hub eventi usando un processore di eventi. Il processore di eventi semplifica la ricezione di eventi da hub eventi.
Creare un account Archiviazione di Azure e un contenitore BLOB
In questo argomento di avvio rapido si usa una risorsa di archiviazione di Azure come archivio di checkpoint. Seguire questa procedura per creare un account di archiviazione di Azure.
- Creare un account di archiviazione di Azure
- Creare un contenitore BLOB
- Eseguire l'autenticazione nel contenitore BLOB usando l'autenticazione dell'ID Entra (senza password) o un stringa di connessione allo spazio dei nomi .
Seguire queste raccomandazioni quando si usa Archiviazione BLOB di Azure come archivio checkpoint:
- Usare un contenitore separato per ogni gruppo di consumer. È possibile usare lo stesso account di archiviazione, ma occorre usare un contenitore per ogni gruppo.
- Non usare il contenitore per altri elementi e non usare l'account di archiviazione per altri elementi.
- L'account di archiviazione deve trovarsi nella stessa area in cui si trova l'applicazione distribuita. Se l'applicazione è locale, provare a scegliere l'area più vicina possibile.
Nella pagina Account di archiviazione del portale di Azure verificare che le impostazioni seguenti siano disabilitate nella sezione Servizio BLOB.
- Spazio dei nomi gerarchico
- Eliminazione temporanea dei BLOB
- Controllo delle versioni
Quando si sviluppa in locale, assicurarsi che l'account utente che accede ai dati BLOB disponga delle autorizzazioni corrette. Per leggere e scrivere dati BLOB, è necessario disporre del ruolo Collaboratore ai dati dei BLOB di archiviazione. Per assegnare a se stessi questo ruolo, è necessario assegnare il ruolo Amministratore accesso utenti o un altro ruolo che include l'azione Microsoft.Authorization/roleAssignments/write. È possibile assegnare ruoli controllo degli accessi in base al ruolo di Azure a un utente usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell. Per altre informazioni sugli ambiti disponibili per le assegnazioni di ruolo, vedere la pagina panoramica dell'ambito.
In questo scenario si assegneranno le autorizzazioni all'account utente con ambito all'account utente, per seguire il principio dei privilegi minimi. Questa procedura offre agli utenti solo le autorizzazioni minime necessarie e crea ambienti di produzione più sicuri.
L'esempio seguente assegnerà il ruolo Collaboratore ai dati dei BLOB di archiviazione all'account utente, che fornisce l'accesso in lettura e scrittura ai dati BLOB nell'account di archiviazione.
Importante
Nella maggior parte dei casi, la propagazione dell'assegnazione di ruolo in Azure richiederà almeno due minuti, ma in rari casi può richiedere fino a otto minuti. Se si ricevono errori di autenticazione quando si esegue il codice per la prima volta, attendere alcuni istanti e riprovare.
Nel portale di Azure, individuare l'account di archiviazione usando la barra di ricerca principale o lo spostamento a sinistra.
Nella pagina di panoramica dell'account di archiviazione selezionare Controllo di accesso (IAM) dal menu a sinistra.
Nella pagina Controllo di accesso (IAM), selezionare la scheda Assegnazioni di ruolo.
Selezionare + Aggiungi dal menu in alto e quindi Aggiungi assegnazione di ruolo dal menu a discesa risultante.
Usare la casella di ricerca per filtrare i risultati in base al ruolo desiderato. Per questo esempio, cercare Collaboratore ai dati dei BLOB di archiviazione e selezionare il risultato corrispondente, quindi scegliere Avanti.
In Assegna accesso a selezionare Utente, gruppo o entità servizio e quindi scegliere + Seleziona membri.
Nella finestra di dialogo cercare il nome utente di Microsoft Entra (in genere l'indirizzo di posta elettronica user@domain) e quindi scegliere Selezionare nella parte inferiore della finestra di dialogo.
Selezionare Rivedi e assegna per passare alla pagina finale e quindi Rivedi e assegna di nuovo per completare il processo.
Creare un progetto per l'app ricevente
- Nella finestra Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione EventHubQuickStart, scegliere Aggiunti e selezionare Nuovo progetto.
- Selezionare Applicazione console e selezionare Avanti.
- Immettere EventHubsReceiver per Nome progetto e selezionare Crea.
- Nella finestra Esplora soluzioni fare clic con il pulsante destro del mouse su EventHubsReceiver e scegliere Imposta come progetto di avvio.
Aggiungere i pacchetti NuGet al progetto
Scegliere Strumenti>Gestione pacchetti NuGet>Console di Gestione pacchetti dal menu.
Nella finestra della console di Gestione pacchetti verificare che EventHubsReceiver sia selezionato per il progetto predefinito. In caso contrario, usare l'elenco a discesa per selezionare EventHubsReceiver.
Eseguire il comando seguente per installare i pacchetti Azure.Messaging.EventHubs e Azure.Identity NuGet. Premere INVIO per eseguire l'ultimo comando.
Install-Package Azure.Messaging.EventHubs Install-Package Azure.Messaging.EventHubs.Processor Install-Package Azure.Identity
Aggiornare il codice
Sostituire il contenuto di Program.cs con il codice seguente:
Sostituire il codice esistente nel
Program.cs
file con il codice di esempio seguente. Sostituire quindi i<STORAGE_ACCOUNT_NAME>
valori segnaposto e<BLOB_CONTAINER_NAME>
per l'URIBlobContainerClient
. Sostituire anche i<EVENT_HUB_NAMESPACE>
valori segnaposto e<HUB_NAME>
.EventProcessorClient
Ecco i passaggi importanti del codice:
- Crea un oggetto EventProcessorClient usando lo spazio dei nomi di Hub eventi e il nome dell'hub eventi. È necessario compilare l'oggetto BlobContainerClient per il contenitore nell'archiviazione di Azure creata in precedenza.
- Specifica i gestori per gli eventi ProcessEventAsync e ProcessErrorAsync dell'oggetto EventProcessorClient .
- Avvia l'elaborazione degli eventi richiamando StartProcessingAsync nell'oggetto EventProcessorClient .
- Arresta l'elaborazione degli eventi dopo 30 secondi richiamando StopProcessingAsync nell'oggetto EventProcessorClient .
using Azure.Identity; using Azure.Messaging.EventHubs; using Azure.Messaging.EventHubs.Consumer; using Azure.Messaging.EventHubs.Processor; using Azure.Storage.Blobs; using System.Text; // Create a blob container client that the event processor will use // TODO: Replace <STORAGE_ACCOUNT_NAME> and <BLOB_CONTAINER_NAME> with actual names BlobContainerClient storageClient = new BlobContainerClient( new Uri("https://<STORAGE_ACCOUNT_NAME>.blob.core.windows.net/<BLOB_CONTAINER_NAME>"), new DefaultAzureCredential()); // Create an event processor client to process events in the event hub // TODO: Replace the <EVENT_HUBS_NAMESPACE> and <HUB_NAME> placeholder values var processor = new EventProcessorClient( storageClient, EventHubConsumerClient.DefaultConsumerGroupName, "<EVENT_HUB_NAMESPACE>.servicebus.windows.net", "<HUB_NAME>", new DefaultAzureCredential()); // Register handlers for processing events and handling errors processor.ProcessEventAsync += ProcessEventHandler; processor.ProcessErrorAsync += ProcessErrorHandler; // Start the processing await processor.StartProcessingAsync(); // Wait for 30 seconds for the events to be processed await Task.Delay(TimeSpan.FromSeconds(30)); // Stop the processing await processor.StopProcessingAsync(); Task ProcessEventHandler(ProcessEventArgs eventArgs) { // Write the body of the event to the console window Console.WriteLine("\tReceived event: {0}", Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray())); Console.ReadLine(); return Task.CompletedTask; } Task ProcessErrorHandler(ProcessErrorEventArgs eventArgs) { // Write details about the error to the console window Console.WriteLine($"\tPartition '{eventArgs.PartitionId}': an unhandled exception was encountered. This was not expected to happen."); Console.WriteLine(eventArgs.Exception.Message); Console.ReadLine(); return Task.CompletedTask; }
Compilare il progetto e assicurarsi che non siano presenti errori.
Nota
Per il codice sorgente completo con commenti più informativi, vedere questo file in GitHub.
Eseguire l'applicazione ricevente.
Verrà visualizzato un messaggio che informa che gli eventi sono stati ricevuti. Premere INVIO dopo aver visualizzato un messaggio di evento ricevuto.
Received event: Event 1 Received event: Event 2 Received event: Event 3
Questi eventi sono i tre eventi inviati in precedenza all'hub eventi eseguendo il programma mittente.
Nella portale di Azure è possibile verificare che siano presenti tre messaggi in uscita inviati a Hub eventi all'applicazione ricevente. Aggiornare la pagina per aggiornare il grafico. La conferma che i messaggi sono stati ricevuti potrebbe comparire dopo alcuni secondi.
Convalida dello schema per applicazioni basate su Hub eventi SDK
È possibile usare Registro schemi di Azure per eseguire la convalida dello schema quando si trasmetteno dati con le applicazioni basate su SDK di Hub eventi. Registro schemi di Azure di Hub eventi offre un repository centralizzato per la gestione degli schemi ed è possibile connettere facilmente le applicazioni nuove o esistenti al Registro schemi.
Per altre informazioni, vedere Convalidare gli schemi con Hub eventi SDK.
Esempi e informazioni di riferimento
Questa guida introduttiva fornisce istruzioni dettagliate per implementare uno scenario di invio di un batch di eventi a un hub eventi e quindi di riceverli. Per altri esempi, selezionare i collegamenti seguenti.
- Esempi di Hub eventi su GitHub
- Esempi di processore di eventi in GitHub
- Esempio di controllo degli accessi in base al ruolo di Azure
Per informazioni di riferimento complete sulla libreria .NET, vedere la documentazione dell'SDK.
Pulire le risorse
Eliminare il gruppo di risorse con lo spazio dei nomi di Hub eventi o eliminare solo lo spazio dei nomi se si vuole mantenere il gruppo di risorse.
Contenuto correlato
Vedere l'esercitazione seguente: