Inicio rápido: envío y recepción de mensajes de un tema de espacio de nombres de Azure Event Grid (.NET)

En este inicio rápido, hará lo siguiente:

  1. Crear un espacio de nombres de Event Grid desde Azure Portal.
  2. Crear un tema del espacio de nombres de Event Grid medieante Azure Portal.
  3. Creación de una suscripción a eventos mediante Azure Portal.
  4. Escribir una aplicación de consola de .NET para enviar un conjunto de mensajes al tema
  5. Escribir una aplicación de consola de .NET para recibir esos mensajes del tema.

Importante

Los espacios de nombres, los temas de espacios de nombres y las suscripciones de eventos asociados a los temas de espacio de nombres están disponibles inicialmente en las siguientes regiones:

  • Este de EE. UU.
  • Centro de EE. UU.
  • Centro-sur de EE. UU.
  • Oeste de EE. UU. 2
  • Este de Asia
  • Sudeste de Asia
  • Norte de Europa
  • Oeste de Europa
  • Norte de Emiratos Árabes Unidos

Nota

En este inicio rápido se proporcionan instrucciones paso a paso para implementar un escenario sencillo de envío de un lote de mensajes a un tema del espacio de nombres de Event Grid y la posterior recepción de estos. Para obtener información general sobre la biblioteca cliente de .NET, consulte Biblioteca cliente de Azure Event Grid para .NET. Para obtener más ejemplos, consulte los ejemplos de .NET de Event Grid en GitHub.

Requisitos previos

Si no está familiarizado con el servicio, consulte la información general sobre Event Grid antes de seguir este inicio rápido.

  • Suscripción de Azure. Para usar los servicios de Azure, entre los que se incluye Azure Event Grid, se necesita una suscripción. Si no tiene una cuenta de Azure existente, puede registrarse para obtener una evaluación gratuita.
  • Visual Studio 2022. La aplicación de ejemplo utiliza las nuevas características que se introdujeron en C# 10. Para usar la sintaxis más reciente, le recomendamos que instale .NET 6.0, o una versión posterior, y establezca la versión del lenguaje en latest. Si usa Visual Studio, las versiones anteriores a Visual Studio 2022 no son compatibles con las herramientas necesarias para compilar proyectos de C# 10.

Creación de un espacio de nombres en Azure Portal

Un espacio de nombres en Azure Event Grid es un contenedor lógico para uno o varios temas, clientes, grupos de clientes, espacios de temas y enlaces de permisos. Proporciona un espacio de nombres único, lo que le permite tener varios recursos en la misma región de Azure. Con un espacio de nombres de Azure Event Grid, ahora puede agrupar recursos relacionados y administrarlos como una sola unidad en la suscripción de Azure.

Lea las secciones siguientes para crear, visualizar y administrar un espacio de nombres de Azure Event Grid.

Para crear un espacio de nombres:

  1. Inicie sesión en Azure Portal.

  2. En el cuadro de búsqueda, escriba Espacios de nombres de Event Grid y seleccione Espacios de nombres de Event Grid en los resultados.

    Screenshot showing Event Grid Namespaces in the search results.

  3. En la página Espacios de nombres de Event Grid, seleccione + Crear en la barra de herramientas.

    Screenshot showing Event Grid Namespaces page with the Create button on the toolbar selected.

  4. En la página Conceptos básicos, siga estos pasos.

    1. Seleccione la suscripción de Azure en la que desea crear el espacio de nombres.

    2. Seleccione un grupo de recursos existente o cree uno nuevo.

    3. Escriba nombre para el espacio de nombres.

    4. Seleccione la región o la ubicación en la que desea crear el espacio de nombres.

    5. En la parte inferior de la página, seleccione Revisar y crear.

      Screenshot showing the Basics tab of Create namespace page.

  5. En la pestaña Revisar y crear, examine la configuración y seleccione Crear.

  6. En la página Implementación correcta, seleccione Ir al recurso para ir a la página de su espacio de nombres.

Creación de un tema de espacio de nombres

  1. Si no está en la página Espacio de nombres de Event Grid, siga los pasos para crear, ver y administrar espacios de nombres para ver el espacio de nombres que quiere usar para crear el tema.

  2. En la página Espacio de nombres de Event Grid, seleccione la opción Temas de la sección Eventing del menú izquierdo.

  3. En la página Temas, seleccione + Tema en la barra de comandos.

    Screenshot showing Event Grid namespace topic creation.

  4. En la página Crear tema, escriba el nombre del tema que quiere crear y seleccione Crear.

    Screenshot showing Event Grid namespace topic creation basics.

Creación de una suscripción a evento

  1. Si está en la página Temas del espacio de nombres de Event Grid en Azure Portal, seleccione el tema en la lista de temas. Si está en la página Temas, siga las instrucciones para crear, ver y administrar temas de espacio de nombres para identificar el tema que desea usar para crear la suscripción de eventos.

  2. En la página Tema de espacio de nombres de Event Grid, seleccione la opción Suscripciones en la sección Entidades del menú de la izquierda.

  3. En la página Suscripciones, seleccione el botón + Suscripción en la barra de comandos.

    Screenshot showing Event Grid event subscription create.

  4. En la pestaña Aspectos básicos, escriba el nombre del tema que desea crear y, a continuación, seleccione Siguiente: Filtros en la parte inferior de la página.

    Screenshot showing Event Grid event subscription create basics.

  5. En la pestaña Filtros, agregue los nombres de los tipos de eventos que quiere filtrar en la suscripción y agregue los filtros de atributos de contexto que quiere usar en la suscripción. A continuación, seleccione Siguiente: Características adicionales en la parte inferior de la página.

    Screenshot showing Event Grid event subscription create filters.

  6. En la pestaña Características adicionales, puede especificar la retención de eventos, el número máximo de entregas, la duración del bloqueo y la configuración de mensajes fallidos.

    Screenshot showing Event Grid event subscription create additional features.

  7. Seleccione Crear para crear la suscripción de eventos.

Autenticación de la aplicación en Azure

En este inicio rápido se muestran maneras de conectarse a Azure Event Grid: cadena de conexión.

Este documento muestra cómo usar una cadena de conexión para conectarse a un espacio de nombres de Event Grid. Si no está familiarizado con Azure, puede que le resulte más fácil la opción de la cadena de conexión.

La creación un nuevo espacio de nombres de Event Grid genera automáticamente unas claves iniciales principal y secundaria que conceden control total sobre todos los aspectos del espacio de nombres o temas.

Un cliente puede usar la cadena de conexión para conectarse al espacio de nombres de Event Grid. Para copiar las claves de acceso del tema del espacio de nombres, siga estos pasos:

  1. En la página Espacio de nombres de Event Grid, seleccione Temas.
  2. Seleccione el tema al que necesite acceder.
  3. En la página Claves de acceso, seleccione el botón Copiar situado junto a Clave 1 o Clave 2 para copiar las claves de acceso en el portapapeles para su uso posterior. Pegue este valor en el Bloc de notas o cualquier otra ubicación temporal.

Inicio de Visual Studio

Puede autorizar el acceso al espacio de nombres de Event Grid siguiendo estos pasos:

Inicie Visual Studio. Si aparece la ventana Introducción, seleccione el vínculo Continuar sin código en el panel derecho.

Envío de mensajes al tema

En esta sección se muestra cómo crear una aplicación de consola de .NET para enviar mensajes a una tema de Event Grid.

Creación de una aplicación de consola

  1. En Visual Studio, seleccione el menú Archivo ->Nuevo ->Proyecto.

  2. En el cuadro de diálogo Crear un nuevo proyecto, siga estos pasos: Si no ve este cuadro de diálogo, seleccione Archivo en el menú, seleccione Nuevo y, después, seleccione Proyecto.

    1. Seleccione C# como lenguaje de programación.

    2. Seleccione Consola como tipo de aplicación.

    3. Seleccione Aplicación de consola en la lista de resultados.

    4. Después, seleccione Siguiente.

      Screenshot showing the Create a new project dialog box with C# and Console selected.

  3. Escriba EventSender como nombre del proyecto, EventGridQuickStart como nombre de la solución y, después, seleccione Siguiente.

    Screenshot showing the solution and project names in the Configure your new project dialog box.

  4. En la página Información adicional, seleccione Crear para crear la solución y el proyecto.

Agregar los paquetes de NuGet al proyecto

  1. Seleccione Herramientas>Administrador de paquetes NuGet>Consola del Administrador de paquetes en el menú.

  2. Ejecute el siguiente comando para instalar el paquete NuGet Azure.Messaging.EventGrid:

    Install-Package Azure.Messaging.EventGrid -version 4.22.0-beta.1
    

Agregar código para enviar eventos al tema del espacio de nombres

  1. Reemplace el contenido de Program.cs por el código siguiente. Se describen los pasos importantes, con información adicional en los comentarios del código.

    Importante

    Actualice los valores de marcadores de posición (<ENDPOINT>, <TOPIC-NAME>, <TOPIC-ACCESS-KEY>, <TOPIC-SUBSCRIPTION-NAME>) en el fragmento de código con el punto de conexión del tema, el nombre del tema, la clave del tema y el nombre de suscripción del tema.

    using Azure.Messaging;
    using Azure;
    using Azure.Messaging.EventGrid.Namespaces;    
    
    // TODO: Replace the <ENDPOINT> , <TOPIC-KEY> and <TOPIC-NAME> placeholder
    
    var topicEndpoint = "<TOPIC-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var topicKey = "<TOPIC-ACCESS-KEY>";
    var topicName = "<TOPIC-NAME>";
    var subscription = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridClient(new Uri(topicEndpoint), 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.PublishCloudEventAsync(topicName, ev);
    
    // Publish a batch of CloudEvents.
    
    await client.PublishCloudEventsAsync(
    topicName,
    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. Compile el proyecto y asegúrese de que no hay errores.

  3. Ejecute el programa y espere el mensaje de confirmación.

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

    Importante

    En la mayoría de los casos, la asignación de roles tardará un minuto o dos en propagarse en Azure. En ocasiones excepcionales, puede tardar hasta ocho minutos. Si recibe errores de autenticación al ejecutar por primera vez el código, espere unos instantes e inténtelo de nuevo.

  4. En Azure Portal, haga lo siguiente:

    1. Vaya al espacio de nombres de Event Grid.

    2. En la página Información general, verá el número de eventos publicados en el espacio de nombres del gráfico.

      Screenshot showing the Event Grid Namespace page in the Azure portal.

Extracción de mensajes del tema

En esta sección, se crea una aplicación de consola de .NET que recibe mensajes del tema.

Creación de un proyecto para recibir los CloudEvents publicados

  1. En la ventana del Explorador de soluciones, haga clic con el botón derecho en la solución EventGridQuickStart, haga clic en Agregar y seleccione Nuevo proyecto.
  2. Seleccione Aplicación de consola y elija Siguiente.
  3. Escriba EventReceiver en Nombre de proyecto y seleccione Crear.
  4. En la ventana del Explorador de soluciones, haga clic con el botón derecho en EventReceiver y seleccione Establecer como proyecto de inicio.

Agregar los paquetes de NuGet al proyecto

  1. Seleccione Herramientas>Administrador de paquetes NuGet>Consola del Administrador de paquetes en el menú.

  2. Ejecute el siguiente comando para instalar el paquete NuGet Azure.Messaging.EventGrid. Seleccione EventReceiver para el proyecto predeterminado si aún no está establecido.

    Install-Package Azure.Messaging.EventGrid -version 4.22.0-beta.1
    

    Screenshot showing EventReceiver project selected in the Package Manager Console.

Agregar el código para recibir eventos del tema

En esta sección agregará código para recuperar mensajes de la cola.

  1. En la clase Program, agregue el siguiente código:

    Importante

    Actualice los valores de marcadores de posición (<ENDPOINT>, <TOPIC-NAME>, <TOPIC-ACCESS-KEY>, <TOPIC-SUBSCRIPTION-NAME>) en el fragmento de código con el punto de conexión del tema, el nombre del tema, la clave del tema y el nombre de suscripción del tema.

    using Azure;
    using Azure.Messaging;
    using Azure.Messaging.EventGrid.Namespaces;
    
    var topicEndpoint = "<TOPIC-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var topicKey = "<TOPIC-ACCESS-KEY>";
    var topicName = "<TOPIC-NAME>";
    var subscription = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridClient(new Uri(topicEndpoint), new AzureKeyCredential(topicKey));
    
    // Receive the published CloudEvents
    ReceiveResult result = await client.ReceiveCloudEventsAsync(topicName, subscription, 3);
    
    Console.WriteLine("Received Response");
    Console.WriteLine("-----------------");
    
    
  2. Anexe los siguientes métodos al final de la clase 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.Value)
    {
        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.ReleaseCloudEventsAsync(topicName, subscription, new ReleaseOptions(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.AcknowledgeCloudEventsAsync(topicName, subscription, new AcknowledgeOptions(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.RejectCloudEventsAsync(topicName, subscription, new RejectOptions(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; }
    }    
    

Limpieza de recursos

Vaya al espacio de nombres de Event Grid en Azure Portal y seleccione Eliminar para eliminar el espacio de nombres de Event Grid y el tema que hay en él.

Consulte Referencia de la API de .NET