Suscripciones de inserción

En este documento, se proporciona una descripción general de una suscripción push, su flujo de trabajo y las propiedades asociadas.

En la entrega de envío, Pub/Sub inicia solicitudes a tu suscriptor para entregar mensajes. Los mensajes se entregan a direcciones públicas o un webhook, como una solicitud HTTPS POST.

Las suscripciones push minimizan las dependencias en las bibliotecas cliente y los mecanismos de autenticación específicos de Pub/Sub. También funcionan bien con entornos sin servidores y con ajuste de escala automático tecnologías de servicios, como Cloud Run Functions, Cloud Run y Google Kubernetes Engine.

Antes de comenzar

Antes de leer este documento, asegúrate de estar familiarizado con la siguiente información:

  • Cómo funciona Pub/Sub y términos de Pub/Sub diferentes.

  • Los diferentes tipos de suscripciones que admite Pub/Sub y por qué podrías usar una suscripción.

Flujo de trabajo de las suscripciones de envío

En una suscripción de envío, un servidor Pub/Sub inicia una solicitud para a tu cliente suscriptor para entregar mensajes.

En la siguiente imagen, se muestra el flujo de trabajo entre un cliente suscriptor y una suscripción push.

Flujo de mensajes para una suscripción de envío
Figura 3: Flujo de trabajo para una suscripción de envío

A continuación, se incluye una breve descripción del flujo de trabajo que hace referencia a la Figura 3:

  1. El servidor Pub/Sub envía cada mensaje como una solicitud HTTPS a cliente suscriptor en un extremo preconfigurado. Esta solicitud se muestra como un PushRequest en la imagen.
  2. El extremo confirma el mensaje cuando muestra un código de estado de éxito HTTP. Una respuesta no exitosa indica que Pub/Sub debe volver a enviar los mensajes. Esta respuesta se muestra como PushResponse en el imagen.
  3. Pub/Sub ajusta de forma dinámica la frecuencia de solicitudes de envío según según la frecuencia con la que recibe respuestas exitosas.

Propiedades de una suscripción de envío

Las propiedades que configuras para una suscripción de envío determinan escribes mensajes en tu suscripción. Para obtener más información, consulta propiedades de la suscripción.

Cómo reciben mensajes los extremos de envío

Cuando Pub/Sub envía un mensaje a un extremo de envío, puedes elegir enviarlo unido o sin unir. De forma predeterminada, los mensajes se envían unidos.

  • Ajustado. Pub/Sub envía el mensaje en el cuerpo JSON de una solicitud POST.
  • Sin unir. Pub/Sub envía los datos del mensaje sin procesar directamente como el cuerpo HTTP.

En los siguientes ejemplos, se muestra el cuerpo unido de una solicitud POST de JSON a un envío extremo que contiene la cadena Hello there en el campo message.data

El cuerpo de una solicitud POST es un objeto JSON. Los datos del mensaje se encuentran en message.data y está codificado en base64.

Ejemplo de una solicitud con los valores mínimos

  {
      "message": {
          "data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
          "messageId": "2070443601311540",
          "message_id": "2070443601311540",
          "publishTime": "2021-02-26T19:13:55.749Z",
          "publish_time": "2021-02-26T19:13:55.749Z"
      },
    "subscription": "projects/myproject/subscriptions/mysubscription"
  }
  

Ejemplo de una solicitud con los valores máximos

Ten en cuenta que este ejemplo muestra los valores máximos actuales, que podrían cambiar. con el tiempo. Además, el mapa de atributos puede contener una variedad de valores.

  {
      "deliveryAttempt": 5,
      "message": {
          "attributes": {
              "key": "value"
          },
          "data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
          "messageId": "2070443601311540",
          "message_id": "2070443601311540",
          "orderingKey": "key",
          "publishTime": "2021-02-26T19:13:55.749Z",
          "publish_time": "2021-02-26T19:13:55.749Z"
      },
    "subscription": "projects/myproject/subscriptions/mysubscription"
}

Para recibir mensajes de suscripciones de envío, usa un webhook y procesa las solicitudes POST que Pub/Sub envía al extremo de envío. Para obtener más información sobre cómo procesar estas solicitudes POST en App Engine, consulta Escribe y responde mensajes de Pub/Sub.

Después de recibir una solicitud de envío, muestra un código de estado HTTP. Para confirmar el mensaje, muestra uno de los siguientes códigos de estado:

  • 102
  • 200
  • 201
  • 202
  • 204

Para enviar una confirmación negativa del mensaje, devuelve cualquier otro estado código. Si envías un acuse de recibo negativo o fecha límite de confirmación vence, Pub/Sub vuelve a enviar el mensaje. No puedes modificar de confirmación de recepción de los mensajes individuales que recibes de suscripciones.

Autenticación para suscripciones de envío

Si una suscripción de envío usa autenticación, el servicio de Pub/Sub firma un JWT y lo envía en el encabezado de autorización de la solicitud de envío.

Para obtener más información sobre cómo configurar la autenticación, consulta Autentica solicitudes push.

Cómo detener y reanudar la entrega de mensajes

Para evitar por un tiempo que Pub/Sub envíe solicitudes al extremo de envío, cambia la suscripción a extracción. El cambio puede tardar varios minutos en aplicarse.

Para restablecer la entrega de envío, vuelve a configurar la URL en un extremo válido. Para detener la entrega de forma permanente, borra la suscripción.

Retirada de envío

Si un suscriptor de envío envía demasiadas confirmaciones negativas, Pub/Sub podrían comenzar a entregar mensajes con una retirada de envío. Cuando Pub/Sub usa una retirada de envío, deja de entregar mensajes durante un período predeterminado. Este intervalo de tiempo puede variar entre 100 milisegundos y 60 segundos. Después de que haya transcurrido el tiempo, Pub/Sub comenzará a enviar mensajes nuevamente.

La retirada de envío usa un algoritmo de retirada exponencial para determinar la demora que usa Pub/Sub entre el envío de mensajes. Esta cantidad de tiempo se calcula en función de la cantidad de palabras clave negativas que envían los suscriptores.

Por ejemplo, si un suscriptor de envío recibe cinco mensajes por segundo y envía una confirmación negativa por segundo, Pub/Sub entrega mensajes aproximadamente cada 500 milisegundos. O si el comando de envío el suscriptor envía cinco confirmaciones negativas por segundo Pub/Sub entrega mensajes cada 30 a 60 segundos.

Ten en cuenta las siguientes consideraciones sobre el envío:

  • No se puede activar ni desactivar la retirada de envíos. Tampoco puedes modificar los valores para calcular el retraso.
  • Envía activadores de retirada en las siguientes acciones:
    • Cuando se recibe una confirmación negativa.
    • Cuando vence el plazo de confirmación de un mensaje.
  • La demora de envío se aplica a todos los mensajes de una suscripción (global).

Frecuencia de envío

Pub/Sub ajusta la cantidad de solicitudes de envío simultáneas con un slow-start de la API. La cantidad máxima permitida de solicitudes de envío simultáneas es la ventana de aplicación. La ventana de envío aumenta en cualquier entrega exitosa y disminuye las fallas. El sistema comienza con una pequeña ventana de un solo dígito. de tamaño del ensamble.

Cuando un suscriptor confirma mensajes, la ventana aumenta exponencialmente. Para suscripciones en las que los suscriptores reconocen más del 99% de los mensajes y en promedio menos de un segundo de latencia de las solicitudes, la ventana de y se expanden lo suficiente para seguir el ritmo de la capacidad de procesamiento.

La latencia de la solicitud de envío incluye lo siguiente:

Después de 3,000 mensajes pendientes por región, la ventana aumenta de manera lineal a evitar que el extremo de envío reciba demasiados mensajes. Si el promedio si la latencia es superior a un segundo o el suscriptor confirma menos del 99% de solicitudes, la ventana disminuye al límite inferior de 3,000 mensajes pendientes.

Si quieres obtener más información sobre las métricas que puedes usar para supervisar la entrega de envío, consulta Supervisa las suscripciones de envío.

Cuotas y límites

Las suscripciones de envío están sujetas a un conjunto cuotas y límites de recursos.

¿Qué sigue?