Guida introduttiva: Inviare e ricevere messaggi da un argomento dello spazio dei nomi di Griglia di eventi di Azure (.NET)

In questo avvio rapido si eseguono le operazioni seguenti:

  1. Creazione di uno spazio dei nomi di Griglia di eventi nel portale di Azure.
  2. Creazione di un argomento dello spazio dei nomi di Griglia di eventi nel portale di Azure.
  3. Creare una sottoscrizione di eventi usando il portale di Azure.
  4. Scrivere un'applicazione console .NET per inviare un set di messaggi all'argomento
  5. Scrivere un'applicazione console .NET per ricevere tali messaggi dall'argomento.

Nota

Questa guida introduttiva fornisce istruzioni dettagliate per implementare uno scenario semplice di invio di un batch di messaggi a un argomento dello spazio dei nomi di Griglia di eventi e quindi riceverli. Per una panoramica della libreria client .NET, vedere Libreria client di Griglia di eventi di Azure per .NET. Per altri esempi, vedere Esempi di Griglia di eventi .NET in GitHub.

Prerequisiti

Se non si ha familiarità con il servizio, vedere Panoramica di Griglia di eventi prima di seguire questa guida introduttiva.

  • Sottoscrizione di Azure. Per usare i servizi di Azure, tra cui Griglia di eventi di Azure, è necessaria una sottoscrizione. Se non si ha un account Azure esistente, è possibile iscriversi per ottenere una versione di valutazione gratuita.
  • Visual Studio 2022. L'applicazione di esempio usa nuove funzionalità introdotte in C# 10. Per usare la sintassi più recente, è consigliabile installare .NET 6.0 o versione successiva e impostare la versione del linguaggio su latest. Se si usa Visual Studio, le versioni precedenti a Visual Studio 2022 non sono compatibili con gli strumenti necessari per la compilazione di progetti in C# 10.

Creare uno spazio dei nomi nel portale di Azure

Uno spazio dei nomi in Griglia di eventi di Azure è un contenitore logico per uno o più argomenti, client, gruppi client, spazi di argomenti e associazioni di autorizzazioni. Fornisce uno spazio dei nomi univoco, consentendo di avere più risorse nella stessa area di Azure. Con uno spazio dei nomi di Griglia di eventi di Azure è ora possibile raggruppare le risorse correlate e gestirle come singola unità nella sottoscrizione di Azure.

Seguire le sezioni successive per creare, visualizzare e gestire uno spazio dei nomi di Griglia di eventi di Azure.

Per creare uno spazio dei nomi:

  1. Accedere al portale di Azure.

  2. Nella casella di ricerca immettere Spazi dei nomi di Griglia di eventi e selezionare Spazi dei nomi di Griglia di eventi dai risultati.

    Screenshot che mostra gli spazi dei nomi di Griglia di eventi nei risultati della ricerca.

  3. Nella pagina Spazi dei nomi di Griglia di eventi, selezionare + Crea sulla barra degli strumenti.

    Screenshot che mostra la pagina Spazi dei nomi di Griglia di eventi con il pulsante Crea sulla barra degli strumenti selezionata.

  4. Nella pagina Informazioni di base seguire questa procedura.

    1. Selezionare la sottoscrizione di Azure in cui creare lo spazio dei nomi.

    2. Selezionare un gruppo di risorse esistente o crearne uno.

    3. Immettere un nome per lo spazio dei nomi.

    4. Selezionare l'area o l'ubicazione in cui si vuole creare lo spazio dei nomi.

    5. Selezionare Rivedi e crea nella parte inferiore della pagina.

      Screenshot che mostra la scheda Informazioni di base della pagina Crea spazio dei nomi.

  5. Nella scheda Rivedi e crea esaminare le impostazioni e selezionare Crea.

  6. Nella pagina Distribuzione riuscita selezionare Vai alla risorsa per passare allo spazio dei nomi.

Creare un argomento dello spazio dei nomi

  1. Se non ci si trova nella pagina Spazio dei nomi di Griglia di eventi, seguire la procedura Creare, visualizzare e gestire gli spazi dei nomi per visualizzare lo spazio dei nomi da usare per creare l'argomento.

  2. Nella pagina griglia di eventi Namespace selezionare l'opzione Argomenti nella sezione Gestore eventi nel menu a sinistra.

  3. Nella pagina Argomenti selezionare + Argomento nella barra dei comandi.

    Screenshot che mostra la creazione di argomenti dello spazio dei nomi di Griglia di eventi.

  4. Nella pagina Crea argomento digitare il nome dell'argomento da creare e selezionare Crea.

    Screenshot che mostra le informazioni di base per la creazione di argomenti dello spazio dei nomi di Griglia di eventi.

Creare una sottoscrizione di eventi

  1. Se si è nella pagina Argomenti dello spazio dei nomi di Griglia di eventi nel portale di Azure, selezionare l'argomento nell'elenco degli argomenti. Se ci si trova nella pagina Argomenti, seguire le istruzioni in creare, visualizzare e gestire gli argomenti di uno spazio dei nomi per identificare l'argomento da usare per creare la sottoscrizione di eventi.

    Screenshot che mostra la pagina degli argomenti di Griglia di eventi con un argomento selezionato.

  2. Nella pagina Argomento dello spazio dei nomi di Griglia di eventi selezionare Sottoscrizioni nella sezione Entità nel menu a sinistra.

  3. Nella pagina Sottoscrizioni selezionare il pulsante "+ Sottoscrizione" nella barra dei comandi.

    Screenshot che mostra la creazione della sottoscrizione di eventi di Griglia di eventi.

  4. Nella scheda Informazioni di base seguire questa procedura:

    1. Immettere un nome per la sottoscrizione da creare

    2. Verificare che lo schema di recapito sia impostato su Eventi cloud v1.0.

    3. Verificare che la modalità di recapito sia impostata su Coda (modalità pull).

    4. Selezionare Avanti: Filtri nella parte inferiore della pagina.

      Screenshot che mostra le informazioni di base sulla creazione della sottoscrizione di eventi di Griglia di eventi.

  5. Nella scheda Filtri aggiungere i nomi dei tipi di evento da filtrare nella sottoscrizione e aggiungere i filtri di attributo di contesto da usare nella sottoscrizione. Selezionare quindi Avanti: Funzionalità aggiuntive nella parte inferiore della pagina.

    Screenshot che mostra le informazioni sui filtri per la creazione della sottoscrizione di eventi di Griglia di eventi.

  6. Nella scheda Funzionalità aggiuntive è possibile specificare la conservazione degli eventi, il numero massimo di recapiti, la durata del blocco e le impostazioni di messaggi non recapitabili.

    Screenshot che mostra le informazioni su funzionalità aggiuntive per la creazione della sottoscrizione di eventi di Griglia di eventi.

  7. Selezionare Crea per creare la sottoscrizione di eventi.

Autenticare l'app in Azure

Questa guida introduttiva illustra come connettersi a Griglia di eventi di Azure: stringa di connessione. Questa sezione illustra come usare una stringa di connessione per connettersi a uno spazio dei nomi di Griglia di eventi. Se non si ha familiarità con Azure, l'opzione della stringa di connessione è più semplice da seguire. La creazione di un nuovo spazio dei nomi di Griglia di eventi genera automaticamente una chiave primaria e secondaria iniziale che concedono rispettivamente il controllo completo su tutti gli aspetti dello spazio dei nomi o degli argomenti. Un client può usare la stringa di connessione per connettersi allo spazio dei nomi di Griglia di eventi. Per copiare le chiavi di accesso per l'argomento dello spazio dei nomi, seguire questa procedura:

  1. Nella pagina Spazio dei nomi di Griglia di eventi selezionare Argomenti.

  2. Selezionare l'argomento a cui è necessario accedere.

  3. Nella pagina Chiavi di accesso selezionare il pulsante copia accanto a Chiave 1 o Chiave 2 per copiare i tasti di scelta negli Appunti per usarli in un secondo momento. Incollare questo valore nel Blocco note o in un'altra posizione temporanea.

    Screenshot che mostra la chiave di accesso per un argomento di Griglia di eventi.

Avviare Visual Studio

Avviare Visual Studio. Se viene visualizzata la finestra Attività iniziali, selezionare il collegamento Continua senza codice nel riquadro destro.

Inviare messaggi all'argomento

Questa sezione illustra come creare un'applicazione console .NET per inviare messaggi a un argomento Griglia di eventi.

Creare un'applicazione console

  1. In Visual Studio selezionare il menu File ->Nuovo ->Progetto.

  2. 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.

    1. Selezionare C# come linguaggio di programmazione.

    2. Selezionare Console come tipo di applicazione.

    3. Selezionare App console nell'elenco risultati.

    4. Quindi seleziona Avanti.

      Screenshot che mostra la finestra di dialogo Crea un nuovo progetto con C# e Console selezionati.

  3. Immettere EventSender per il nome del progetto, EventGridQuickStart per il nome della soluzione e quindi selezionare Avanti.

    Screenshot che mostra i nomi di soluzioni e progetti nella finestra di dialogo Configura il nuovo progetto.

  4. Nella pagina Informazioni aggiuntive selezionare Crea per creare la soluzione e il progetto.

Aggiungere i pacchetti NuGet al progetto

  1. Scegliere Strumenti>Gestione pacchetti NuGet>Console di Gestione pacchetti dal menu.

  2. Eseguire il comando seguente per installare il pacchetto NuGet Azure.Messaging.EventGrid:

    Install-Package Azure.Messaging.EventGrid.Namespaces
    

Aggiungere codice per inviare l'evento all'argomento dello spazio dei nomi

  1. Sostituire il contenuto di Program.cs con il codice seguente. Sono descritti i passaggi importanti, con informazioni aggiuntive nei commenti del codice.

    Importante

    Aggiornare i valori segnaposto (<NAMESPACE-ENDPOINT>, <TOPIC-NAME>, <TOPIC-ACCESS-KEY>, <TOPIC-SUBSCRIPTION-NAME>) nel frammento di codice con l'endpoint dello spazio dei nomi, il nome dell'argomento e la chiave dell'argomento.

    using Azure.Messaging;
    using Azure;
    using Azure.Messaging.EventGrid.Namespaces;
    
    
    // TODO: Replace the following placeholders with appropriate values
    
    // Endpoint of the namespace that you can find on the Overview page for your Event Grid namespace. Prefix it with https://.
    // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var namespaceEndpoint = "<NAMESPACE-ENDPOINT>";
    
    // Name of the topic in the namespace
    var topicName = "<TOPIC-NAME>";
    
    // Access key for the topic
    var topicKey = "<TOPIC-ACCESS-KEY>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridSenderClient(new Uri(namespaceEndpoint), topicName, new AzureKeyCredential(topicKey));
    
    // Publish a single CloudEvent using a custom TestModel for the event data.
    var @ev = new CloudEvent("employee_source", "type", new TestModel { Name = "Bob", Age = 18 });
    await client.SendAsync(ev);
    
    // Publish a batch of CloudEvents.
    
    await client.SendAsync(
    new[] {
        new CloudEvent("employee_source", "type", new TestModel { Name = "Tom", Age = 55 }),
        new CloudEvent("employee_source", "type", new TestModel { Name = "Alice", Age = 25 })});
    
    Console.WriteLine("Three events have been published to the topic. Press any key to end the application.");
    Console.ReadKey();
    
    public class TestModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
    
  2. Compilare il progetto e assicurarsi che non siano presenti errori.

  3. Eseguire il programma e attendere il messaggio di conferma.

    Three events have been published to the topic. Press any key to end the application.
    

    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.

  4. Nel portale di Azure seguire questa procedura:

    1. Passare allo spazio dei nomi Griglia di eventi.

    2. Nella pagina Panoramica viene visualizzato il numero di eventi pubblicati nello spazio dei nomi nel grafico.

      Screenshot che mostra la pagina Spazio dei nomi di Griglia di eventi nel portale di Azure.

Eseguire il pull dei messaggi dall'argomento

In questa sezione viene creata un'applicazione console .NET che riceve messaggi dall'argomento.

Creare un progetto per ricevere gli eventi CloudEvent pubblicati

  1. Nella finestra Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione EventGridQuickStart, scegliere Aggiunti e selezionare Nuovo progetto.
  2. Selezionare Applicazione console e selezionare Avanti.
  3. Immettere EventReceiver per Nome progetto e selezionare Crea.
  4. Nella finestra Esplora soluzioni, fare clic con il pulsante destro del mouse su EventReceiver e scegliere Imposta come progetto di avvio.

Aggiungere i pacchetti NuGet al progetto

  1. Scegliere Strumenti>Gestione pacchetti NuGet>Console di Gestione pacchetti dal menu.

  2. Eseguire il comando seguente per installare il pacchetto NuGet Azure.Messaging.EventGrid. Selezionare EventReceiver per Progetto predefinito se non è già impostato.

    Install-Package Azure.Messaging.EventGrid.Namespaces
    

    Screenshot che mostra il progetto EventReceiver selezionato nella console di Gestione pacchetti.

Aggiungere il codice per ricevere eventi dall'argomento

In questa sezione si aggiunge il codice per recuperare i messaggi dalla coda.

  1. Nella classe Program aggiungere il codice:

    Importante

    Aggiornare i valori segnaposto (<NAMESPACE-ENDPOINT>, <TOPIC-NAME>, <TOPIC-ACCESS-KEY>, <TOPIC-SUBSCRIPTION-NAME>) nel frammento di codice con l'endpoint dello spazio dei nomi, il nome dell'argomento, la chiave dell'argomento e il nome della sottoscrizione dell'argomento.

    using Azure;
    using Azure.Messaging;
    using Azure.Messaging.EventGrid.Namespaces;
    
    // TODO: Replace the following placeholders with appropriate values
    
    // Endpoint of the namespace that you can find on the Overview page for your Event Grid namespace
    // Example: https://namespace01.eastus-1.eventgrid.azure.net. 
    var namespaceEndpoint = "<NAMESPACE-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    
    // Name of the topic in the namespace
    var topicName = "<TOPIC-NAME>";
    
    // Access key for the topic
    var topicKey = "<TOPIC-ACCESS-KEY>";
    
    // Name of the subscription to the topic
    var subscriptionName = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Maximum number of events you want to receive
    const short MaxEventCount = 3;
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridReceiverClient(new Uri(namespaceEndpoint), topicName, subscriptionName, new AzureKeyCredential(topicKey));
    
    // Receive the published CloudEvents. 
    ReceiveResult result = await client.ReceiveAsync(MaxEventCount);
    
    Console.WriteLine("Received Response");
    Console.WriteLine("-----------------");
    
    
  2. Aggiungere i metodi seguenti alla fine della classe Program.

    // handle received messages. Define these variables on the top.
    
    var toRelease = new List<string>();
    var toAcknowledge = new List<string>();
    var toReject = new List<string>();
    
    // Iterate through the results and collect the lock tokens for events we want to release/acknowledge/result
    
    foreach (ReceiveDetails detail in result.Details)
    {
        CloudEvent @event = detail.Event;
        BrokerProperties brokerProperties = detail.BrokerProperties;
        Console.WriteLine(@event.Data.ToString());
    
        // The lock token is used to acknowledge, reject or release the event
        Console.WriteLine(brokerProperties.LockToken);
        Console.WriteLine();
    
        // If the event is from the "employee_source" and the name is "Bob", we are not able to acknowledge it yet, so we release it
        if (@event.Source == "employee_source" && @event.Data.ToObjectFromJson<TestModel>().Name == "Bob")
        {
            toRelease.Add(brokerProperties.LockToken);
        }
        // acknowledge other employee_source events
        else if (@event.Source == "employee_source")
        {
            toAcknowledge.Add(brokerProperties.LockToken);
        }
        // reject all other events
        else
        {
            toReject.Add(brokerProperties.LockToken);
        }
    }
    
    // Release/acknowledge/reject the events
    
    if (toRelease.Count > 0)
    {
        ReleaseResult releaseResult = await client.ReleaseAsync(toRelease);
    
        // Inspect the Release result
        Console.WriteLine($"Failed count for Release: {releaseResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in releaseResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Release: {releaseResult.SucceededLockTokens.Count}");
        foreach (string lockToken in releaseResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    if (toAcknowledge.Count > 0)
    {
        AcknowledgeResult acknowledgeResult = await client.AcknowledgeAsync(toAcknowledge);
    
        // Inspect the Acknowledge result
        Console.WriteLine($"Failed count for Acknowledge: {acknowledgeResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in acknowledgeResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Acknowledge: {acknowledgeResult.SucceededLockTokens.Count}");
        foreach (string lockToken in acknowledgeResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    if (toReject.Count > 0)
    {
        RejectResult rejectResult = await client.RejectAsync(toReject);
    
        // Inspect the Reject result
        Console.WriteLine($"Failed count for Reject: {rejectResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in rejectResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Reject: {rejectResult.SucceededLockTokens.Count}");
        foreach (string lockToken in rejectResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    public class TestModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }    
    
    
  3. Nella finestra Esplora soluzioni, fare clic con il pulsante destro del mouse sul progetto EventReceiver e scegliere Imposta come progetto di avvio.

  4. Compilare il progetto e assicurarsi che non siano presenti errori.

  5. Eseguire l'applicazione EventReceiver e confermare che i tre eventi vengono visualizzati nella finestra di output.

    Screenshot che mostra l'output dell'app Receiver.

Pulire le risorse

Passare allo spazio dei nomi di Griglia di eventi nel portale di Azure e selezionare Elimina nel portale di Azure per eliminare lo spazio dei nomi di Griglia di eventi e l'argomento in esso contenuti.

Vedere Riferimento API .NET.