Entrega de incorporación de cambios con HTTP

Este artículo se basa en ¿Qué es Azure Event Grid? y en el artículo sobre los conceptos de Event Grid para proporcionar información básica antes de empezar a utilizar la función de entrega de incorporación de cambios de Event Grid con HTTP. Trata conceptos fundamentales, modelos de recursos y modos de entrega de mensajes admitidos. Al final de este documento, encontrará vínculos útiles a artículos que le pueden guiar sobre cómo usar Event Grid y artículos que ofrecen información conceptual detallada.

Nota

Este documento le ayuda a empezar a trabajar con las funcionalidades de Event Grid que usan el protocolo HTTP. Este artículo es adecuado para los usuarios que necesitan integrar aplicaciones en la nube. Si necesita comunicar datos de dispositivo IoT, consulte Información general sobre la compatibilidad con la característica de agente MQTT Broker en Azure Event Grid.

CloudEvents

Los temas del espacio de nombres de Event Grid aceptan eventos que cumplen con la especificación de estándar abierto de Cloud Native Computing Foundation (CNCF) CloudEvents 1.0 mediante la especificación enlace de protocolo HTTP con formato JSON.

Consulte los conceptos de CloudEvents para obtener más información.

Modos de contenido de CloudEvents

La especificación CloudEvents define tres modos de contenido que se pueden usar: binario, estructurado y por lotes.

Importante

Con cualquier modo de contenido se puede intercambiar texto (JSON, text/*, etc.) o datos de eventos codificados binarios. El modo de contenido binario no se usa exclusivamente para enviar datos binarios.

Los modos de contenido no se centran en la codificación que se usa, en binario o texto, sino en cómo se describen e intercambian los datos de eventos y sus metadatos. El modo de contenido estructurado usa una sola estructura, por ejemplo, un objeto JSON, donde tanto los atributos de contexto como los datos de eventos se unen en la carga HTTP. El modo de contenido binario separa los atributos de contexto, que se asignan a encabezados HTTP y datos de eventos, que es la carga HTTP codificada según el valor del tipo de medios en Content-Type.

Consulte los modos de contenido de CloudEvents para obtener más información.

Mensajes y eventos

Un CloudEvent normalmente incluye datos de eventos que anuncian una aparición en un sistema, es decir, un cambio de estado del sistema. Sin embargo, cuando se utilice CloudEvents, se puede transmitir cualquier tipo de datos. Por ejemplo, puede usar el formato de intercambio CloudEvents para enviar un mensaje de comando para solicitar una acción a una aplicación de nivel inferior. Otro ejemplo sería cuando se enrutan mensajes desde el agente MQTT broker de Event Grid a un tema. En este escenario, va a enrutar un mensaje MQTT encapsulado en un sobre de CloudEvents.

Entrega de extracción

Con la entrega de extracción, la aplicación se conecta a Event Grid para leer CloudEvents mediante la semántica similar a la cola.

La entrega de extracción ofrece estas ventajas de consumo de eventos:

  • Puede consumir eventos a su propio ritmo, a escala o a una velocidad de entrada que admita la aplicación.

  • Puede consumir eventos en un momento de su elección. Por ejemplo, los mensajes se procesan por la noche debido a requisitos específicos de la empresa.

  • Puede consumir eventos a través de un vínculo privado para que los datos usen espacio IP privado.

Nota:

  • Los espacios de nombres proporcionan un modelo de recursos más sencillo con un único tipo de tema. Actualmente, Event Grid admite la publicación de sus propios eventos de aplicación mediante temas de espacio de nombres. No puede consumir eventos de servicios de Azure o sistemas de asociados SaaS mediante temas de espacio de nombres. Tampoco puede crear temas del sistema, temas de dominio o temas de asociados en un espacio de nombres.
  • Los temas de espacio de nombres admiten el formato JSON de CloudEvents.

Suscripciones a eventos de cola

Al recibir eventos o usar operaciones que administran el estado de evento, una aplicación especifica un punto de conexión HTTP de espacio de nombres, un nombre de tema y el nombre de una suscripción de evento de cola. Una suscripción a eventos de cola tiene su deliveryMode establecido en "queue". Las suscripciones de eventos de cola se usan para consumir eventos mediante la API de entrega de extracción. Para obtener más información sobre cómo crear estos recursos, consulte la documentación sobre creación de espacios de nombres, temas y suscripciones de eventos.

Use una suscripción de eventos para definir los criterios de filtrado de los eventos y, al hacerlo, definirá eficazmente el conjunto de eventos que están disponibles para su consumo a través de esa suscripción de eventos. Una o varias aplicaciones de suscriptor (consumidor) pueden conectarse al mismo punto de conexión de espacio de nombres y usar el mismo tema y la misma suscripción a eventos.

Diagrama de alto nivel de un publicador y un consumidor que utilizan una suscripción a eventos. El consumidor utiliza la entrega de extracción.

Operaciones de entrega de extracción

La aplicación usa las siguientes operaciones al trabajar con la entrega de extracción.

  • Una operación de recepción se usa para leer uno o varios eventos mediante una única solicitud a Event Grid. De forma predeterminada, el agente espera hasta 60 segundos para que los eventos estén disponibles. Por ejemplo, los eventos estarán disponibles para su entrega cuando se publiquen por primera vez. Una solicitud de recepción correcta devuelve cero o más eventos. Si hay eventos disponibles, devuelve tantos eventos disponibles como sea posible hasta el recuento de eventos solicitado. Event Grid también devuelve un token de bloqueo para cada lectura de eventos.
  • Un token de bloqueo es un tipo de identificador que identifica un evento que puede usar para controlar su estado.
  • Cuando una aplicación de consumidor recibe un evento y lo procesa, confirma ese evento. Esta operación le indica a Event Grid que elimine el evento para que no se vuelva a entregar a otro cliente. La aplicación de consumidor confirma uno o varios tokens con una sola solicitud especificando sus tokens de bloqueo antes de que expiren.

En otras ocasiones, es posible que a la aplicación de consumidor quiera liberar o rechazar eventos.

  • La aplicación de consumidor libera un evento recibido para indicarle a Event Grid que no está lista para procesar ese evento y para que dicho evento quede disponible para volver a realizar la entrega. Para ello, llama a la operación de liberación con los tokens de bloqueo que identifican los eventos que se van a devolver a Event Grid. La aplicación puede controlar si el evento se debe liberar inmediatamente o si se debe aplicar un retraso antes de que el evento esté disponible para volver a entregarse.

  • Podría optar por rechazar un evento si hay una condición, posiblemente permanente, que impide que la aplicación de consumidor procese el evento. Por ejemplo, se puede rechazar un mensaje con formato incorrecto, ya que no se puede analizar correctamente. Los eventos rechazados son mensajes fallidos, si hay disponible un destino de mensajes fallidos. De lo contrario, se descartan.

Ámbito en el que se ejecutan las operaciones de entrega de extracción

Al invocar una operación de recibir, confirmar, liberar, rechazaro renovar el bloqueo, esas acciones se realizan en el contexto de la suscripción a eventos. Por ejemplo, si reconoce y confirma un evento, ese evento ya no está disponible a través de la suscripción a eventos que se usa al llamar a la acción confirmar. Otra suscripción a eventos podría continuar teniendo disponible el "mismo" evento disponible. Esto se debe a que una suscripción a eventos obtiene una copia de los eventos publicados. Esas copias de eventos son efectivamente distintas entre sí en las diferentes suscripciones a eventos. Cada evento tiene su propio estado, independiente de otros eventos.

Forma de datos al recibir eventos mediante la entrega de extracción

Al entregar eventos mediante la entrega de extracción, Event Grid incluye una matriz de objetos que, a su vez, incluyen los objetos event y brokerProperties. El valor de la propiedad de evento es el CloudEvent entregado en modo de contenido estructurado. El objeto brokerProperties contiene el token de bloqueo asociado al CloudEvent entregado. El siguiente objeto json es una respuesta de ejemplo de una operación de recepción que devuelve dos eventos:

{
    "value": [
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDXYS23Z+5Hq754VqQjxywE",
                "deliveryCount": 2
            },
            "event": {
                "specversion": "1.0",
                "id": "A234-1234-1235",
                "source": "/mycontext",
                "time": "2018-04-05T17:31:00Z",
                "type": "com.example.someeventtype",
                "data": "some data"
            }
        },
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDLeaL+nRJLNq3/5NXd/T0b",
                "deliveryCount": 1
            },
            "event": {
                "specversion": "1.0",
                "id": "B688-1234-1235",
                "source": "/mycontext",
                "type": "com.example.someeventtype",
                "time": "2018-04-05T17:31:00Z",
                "data": {
                    "somekey" : "value",
                    "someOtherKey" : 9
                }
            }
        }
    ]
}

Entrega de inserción y extracción

Con HTTP, Event Grid admite la entrega de eventos de inserción y extracción. Con la entrega de inserción, se define un destino en una suscripción de eventos, un webhook o un servicio de Azure a los que Event Grid envía eventos. Con la entrega de extracción, las aplicaciones del suscriptor se conectan a Event Grid para consumir eventos. La entrega de extracción es compatible con los temas de un espacio de nombres de Event Grid.

Importante

Event Hubs es compatible como destino para las suscripciones a temas de espacio de nombres. En las próximas versiones, los espacios de nombres de Event Grid admitirán todos los destinos disponibles actualmente en Event Grid Basic junto con destinos adicionales.

Diagrama de alto nivel que muestra la entrega de inserción y la entrega de extracción con el tipo de recursos implicados.

Casos en los que se debe usar la entrega de inserción frente a la entrega de extracción

A continuación, se muestran directrices generales que le ayudarán a decidir cuándo usar la entrega de extracción o inserción.

Entrega de extracción

  • Necesita un control absoluto sobre cuándo recibir eventos. Por ejemplo, es posible que la aplicación no esté en funcionamiento todo el tiempo, no sea lo suficientemente estable, o que no procese los datos en determinados momentos.
  • Necesita un control absoluto sobre el consumo de eventos. Por ejemplo, un servicio o una capa de nivel inferior de la aplicación de consumidor tiene un problema que impide que procese eventos. En ese caso, la API de entrega de extracción permite que la aplicación de consumidor libere un evento de lectura ya leído al agente para que se pueda entregar más adelante.
  • Quiere usar vínculos privados al recibir eventos, lo que solo es posible con la entrega de extracción, no con la entrega de inserción.
  • No tiene la capacidad de exponer un punto de conexión y usar la entrega de inserción, pero puede conectarse a Event Grid para consumir eventos.

Entrega de inserción

  • Quiere evitar sondeos constantes para determinar que se ha producido un cambio de estado del sistema. Prefiere usar Event Grid para enviar eventos en el momento en que se producen cambios de estado.
  • Tiene una aplicación que no puede realizar llamadas salientes. Por ejemplo, puede que a su organización le preocupe la filtración de datos. Sin embargo, la aplicación puede recibir eventos a través de un punto de conexión público.

Pasos siguientes

En los artículos siguientes se proporciona información sobre cómo usar Event Grid o se proporciona información adicional sobre los conceptos.