Suscripciones push

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

En la entrega de inserción, Pub/Sub inicia solicitudes a tu aplicación de suscriptor para entregar mensajes. Los mensajes se envían a un servidor o webhook con una dirección pública, como una solicitud POST HTTPS.

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

Antes de empezar

Antes de leer este documento, asegúrese de que conoce los siguientes conceptos:

Flujo de trabajo de la suscripción de inserción

En una suscripción de inserción, un servidor de Pub/Sub inicia una solicitud 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 de una suscripción push
Imagen 3. Flujo de trabajo de una suscripción push

A continuación, se incluye una breve descripción del flujo de trabajo que se muestra en la imagen 3:

  1. El servidor de Pub/Sub envía cada mensaje como una solicitud HTTPS al cliente suscriptor en un endpoint preconfigurado. Esta solicitud se muestra como un PushRequest en la imagen.
  2. El endpoint confirma la recepción del mensaje devolviendo un código de estado HTTP correcto. Si la respuesta no es correcta, Pub/Sub debe volver a enviar los mensajes. Esta respuesta se muestra como un PushResponse en la imagen.
  3. Pub/Sub ajusta dinámicamente la tasa de solicitudes push en función de la tasa a la que recibe respuestas correctas.

Propiedades de una suscripción push

Las propiedades que configure en una suscripción push determinarán cómo escribe los mensajes en la suscripción. Para obtener más información, consulta las propiedades de suscripción.

Cómo reciben mensajes los endpoints de inserción

Cuando Pub/Sub envía un mensaje a un endpoint push, puedes elegir si quieres enviarlo envuelto o sin envolver. De forma predeterminada, los mensajes se envían encapsulados.

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

En los siguientes ejemplos se muestra un cuerpo envuelto de una solicitud JSON POST a un endpoint de envío 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 el campo message.data y están codificados 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 en este ejemplo se muestran los valores máximos actuales, que pueden cambiar con el tiempo. Además, el mapa de atributos puede contener una gran 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 push, usa un webhook y procesa las solicitudes POST que Pub/Sub envía al endpoint push. Para obtener más información sobre cómo procesar estas solicitudes POST en App Engine, consulta el artículo Escribir y responder a mensajes de Pub/Sub.

Después de recibir una solicitud push, devuelve un código de estado HTTP. Para confirmar que ha recibido el mensaje, devuelva uno de los siguientes códigos de estado:

  • 102
  • 200
  • 201
  • 202
  • 204

Para enviar una confirmación negativa del mensaje, devuelve cualquier otro código de estado. Si envías una confirmación negativa o se supera el plazo de confirmación, Pub/Sub vuelve a enviar el mensaje. No puedes modificar la fecha límite de confirmación de los mensajes individuales que recibes de las suscripciones push.

Autenticación para suscripciones push

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

Para obtener más información sobre cómo configurar la autenticación, consulta el artículo Autenticar solicitudes push.

Detener y reanudar la entrega de mensajes

Para evitar temporalmente que Pub/Sub envíe solicitudes al endpoint de push, cambia la suscripción a pull. El cambio puede tardar varios minutos en aplicarse.

Para reanudar la entrega push, vuelve a definir la URL en un endpoint válido. Para detener el envío de forma permanente, elimina la suscripción.

Tiempo de espera

Si un suscriptor push envía demasiadas confirmaciones negativas, Pub/Sub puede empezar a enviar mensajes mediante un retroceso push. Cuando Pub/Sub usa un retroceso de inserción, deja de enviar mensajes durante un periodo predeterminado. Este periodo puede oscilar entre 100 milisegundos y 60 segundos. Una vez transcurrido ese tiempo, Pub/Sub vuelve a entregar los mensajes.

El tiempo de espera exponencial de los pases usa un algoritmo de tiempo de espera exponencial para determinar el retraso que usa Pub/Sub entre el envío de mensajes. Este periodo se calcula en función del número de acuses de recibo negativos que envían los suscriptores push.

Por ejemplo, si un suscriptor de inserción recibe cinco mensajes por segundo y envía un acuse de recibo negativo por segundo, Pub/Sub entrega mensajes aproximadamente cada 500 milisegundos. O bien, si el suscriptor de inserción envía cinco confirmaciones negativas por segundo, Pub/Sub entrega los mensajes cada 30-60 segundos.

Ten en cuenta las siguientes consideraciones sobre la retención de envío:

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

Porcentaje de entrega

Pub/Sub ajusta el número de solicitudes de inserción simultáneas mediante un algoritmo de inicio lento. El número máximo permitido de solicitudes push simultáneas es la ventana de envío. La ventana de envío aumenta con cada envío correcto y disminuye con cada fallo. El sistema empieza con una ventana pequeña de un solo dígito.

Cuando un suscriptor confirma los mensajes, la ventana aumenta de forma exponencial. En el caso de las suscripciones en las que los suscriptores confirman más del 99% de los mensajes y tienen una latencia media inferior a un segundo para las solicitudes de inserción, la ventana de inserción debe ampliarse lo suficiente para mantener el ritmo de cualquier rendimiento de publicación.

La latencia de la solicitud push incluye lo siguiente:

Cuando se superan los 3000 mensajes pendientes por región, la ventana aumenta de forma lineal para evitar que el endpoint de envío reciba demasiados mensajes. Si la latencia media supera un segundo o el suscriptor confirma menos del 99% de las solicitudes, la ventana se reduce al límite inferior de 3000 mensajes pendientes.

Para obtener más información sobre las métricas que puedes usar para monitorizar el envío de inserciones, consulta Monitorizar suscripciones de inserción.

Cuotas y límites

Las suscripciones push están sujetas a una serie de cuotas y límites de recursos.

Siguientes pasos