Compartir a través de


Entrega de incorporación de cambios con HTTP

Este artículo se basa en Introducción a Azure Event Grid y en artículos sobre conceptos para proporcionar información esencial antes de empezar a usar la entrega por extracción de Event Grid a través de HTTP. Trata los conceptos fundamentales, los modelos de recursos y los 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 los datos del dispositivo IoT, consulte Información general sobre la característica de agente de telemetría y transporte de cola de mensajes (MQTT) en Azure Event Grid.

CloudEvents

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

Para obtener más información, consulte Compatibilidad con CloudEvents.

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, puede intercambiar texto (JSON, texto/*y tipos similares) o datos de eventos codificados binarios. El modo de contenido binario no se usa exclusivamente para enviar datos binarios.

Los modos de contenido no son sobre la codificación que se usa, binario o texto, pero sobre cómo se describen e intercambian los datos del evento y sus metadatos. El modo de contenido estructurado usa una sola estructura, como un objeto JSON, donde los atributos de contexto y 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.

Para obtener más información, consulte Modos de contenido de CloudEvents.

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, puede transmitir cualquier tipo de datos al usar CloudEvents. 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, dados los requisitos empresariales, procese mensajes por la noche.

  • Consuma eventos a través de un enlace privado para que los datos utilicen 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 se pueden consumir eventos de servicios de Azure ni de sistemas SaaS de socios mediante temas de namespace. Tampoco puede crear temas del sistema, temas de dominio ni 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 de eventos de cola tiene 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. Al definir los criterios de filtrado, se define 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 que muestra un publicador y un consumidor que usan una suscripción de eventos con 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 lee 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 evento leído.
  • 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 del consumidor reconoce uno o varios tokens en una sola solicitud, especificando sus tokens de bloqueo antes de que expiren.

En otras ocasiones, es posible que tu 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 para 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.

  • Puede 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, un mensaje con formato incorrecto no se puede analizar correctamente y se puede rechazar. 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 un evento, ese evento ya no está disponible a través de la suscripción a eventos utilizada al llamar a la acción reconocer. Otras suscripciones de eventos podrían seguir teniendo el evento "mismo" disponible. Esa disponibilidad existe porque una suscripción de 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.

Estructura de datos al recibir eventos mediante entrega por extracción

Al entregar eventos mediante la entrega por extracción, Event Grid incluye una matriz de objetos que, a su vez, incluye 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

Event Grid admite la entrega de eventos por envío (push) y recepción (pull) usando HTTP. Con la entrega push, defines un destino en una suscripción de eventos, un webhook o un servicio de Azure donde 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 push y la entrega pull con los tipos de recursos involucrados.

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 tu aplicación no esté en funcionamiento todo el tiempo, que no sea lo suficientemente estable o que procese datos solo en ciertos 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 consultas constantes para determinar que se ha producido un cambio en el 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.