Descripción general de los suscriptores

En este documento, se ofrece una descripción general de cómo funcionan las suscripciones en Pub/Sub. Para obtener más información sobre las suscripciones de entrega de extracción y de envío, consulta la guía del suscriptor de extracción y la guía del suscriptor de envío.

Para recibir mensajes publicados en un tema, debes crear una suscripción a ese tema. Los únicos mensajes que están disponibles para las aplicaciones de los suscriptores son aquellos que se publicaron en el tema después de crear la suscripción. La suscripción conecta el tema a una aplicación de suscriptor que recibe y procesa los mensajes publicados en el tema. Un tema puede tener varias suscripciones, pero una suscripción dada pertenece a un solo tema.

Para obtener información sobre cómo crear y actualizar suscripciones, consulta la página sobre cómo administrar temas y suscripciones.

Al menos una entrega

Pub/Sub entrega cada mensaje publicado al menos una vez por cada suscripción. A continuación se mencionan algunas excepciones a este comportamiento:

  • Según la configuración predeterminada, se borra un mensaje que no se puede entregar dentro del tiempo máximo de retención de 7 días y ya no es accesible. Esto suele suceder cuando los suscriptores no se mantienen al día con el flujo de mensajes. Ten en cuenta que puedes configurar el período de retención de mensajes (el rango es de 10 minutos a 7 días). Para obtener más información sobre la configuración de retención de mensajes, consulta la página sobre cómo volver a reproducir y descartar mensajes.
  • Por lo general, si un mensaje se publicó antes de que se cree una suscripción determinada, este no se entregará para esa suscripción. Por lo tanto, un mensaje publicado en un tema sin suscripción no se entregará a ningún suscriptor.

Una vez que se envía un mensaje a un suscriptor, el suscriptor debe confirmar el mensaje. Un mensaje se considera pendiente una vez que ya se envió como entrega y antes de que un suscriptor lo confirme. Pub/Sub intentará entregar repetidas veces cualquier mensaje que no se haya confirmado. Cuando un mensaje está pendiente para un suscriptor, Pub/Sub intenta no entregarlo a ningún otro suscriptor con la misma suscripción. El suscriptor tiene una cantidad de tiempo limitada y configurable (conocida como ackDeadline) para reconocer el mensaje pendiente. Una vez transcurrido el plazo, el mensaje ya no se considera pendiente, y Pub/Sub intentará volver a entregarlo.

Por lo general, Pub/Sub entrega cada mensaje una sola vez y en el orden en que se publicó. Sin embargo, es posible que los mensajes se entreguen más de una vez o en otro orden. En general, para realizar entregas más de una vez, es necesario que el suscriptor sea idempotente cuando procesa los mensajes. Puedes lograr exactamente un procesamiento de transmisiones de mensajes de Pub/Sub con la clase Apache Beam programming model. Los conectores de E/S de Apache Beam te permiten interactuar con Cloud Dataflow a través de fuentes y receptores controlados. Puedes usar el conector de Apache Beam PubSubIO (para Java y Python) para leer desde Cloud Pub/Sub. También puedes lograr el procesamiento ordenado con Cloud Dataflow mediante las API de clasificación estándar del servicio. De forma alternativa, el publicador del tema al que te suscribes puede incluir un token de secuencia en el mensaje para lograr un orden. Consulta el orden de mensajes para obtener más información.

Entrega de envío o de extracción

Una suscripción puede usar el mecanismo de extracción o de envío para la entrega de mensajes. Puedes cambiar o configurar el mecanismo en cualquier momento.

Suscripción de extracción

En la entrega de extracción, tu aplicación de suscriptor inicia solicitudes al servidor Pub/Sub para recuperar mensajes.

  1. La aplicación de suscripción llama al método de extracción de forma explícita, que solicita mensajes para la entrega.
  2. El servidor de Pub/Sub responde con el mensaje (o con un error si la cola está vacía) y un ID de confirmación.
  3. El suscriptor llama al método de confirmación de forma explícita y usa el ID de confirmación para acusar recibo.

Flujo de solicitud de mensaje de suscripción de extracción

Suscripción de envío

En la entrega de envío, Pub/Sub inicia solicitudes a tu aplicación de suscriptor para entregar mensajes.

  1. El servidor Pub/Sub envía cada mensaje como una solicitud HTTPS a la aplicación del suscriptor en un extremo ya configurado.
  2. El extremo confirma el mensaje cuando muestra un código de estado de éxito HTTP. Una respuesta no exitosa indica que el mensaje debe volver a enviarse.

Flujo de solicitud de mensaje de suscripción de envío

Pub/Sub ajusta la frecuencia de solicitudes de envío de forma dinámica en función de la frecuencia a la que recibe respuestas exitosas.

La siguiente tabla ofrece algunas sugerencias con el fin de elegir el mecanismo de entrega adecuado para tu aplicación:

Extracción Envío
  • Gran volumen de mensajes (muchos más que 1 por segundo)
  • La eficiencia y la capacidad de procesamiento de mensajes es fundamental.
  • No es posible configurar el extremo HTTPS público con certificado SSL no autofirmado.
  • Varios temas que debe procesar el mismo webhook
  • Suscriptores del entorno estándar de App Engine y Cloud Functions
  • Entornos en los no es posible configurar las dependencias de Google Cloud (como las credenciales y la biblioteca cliente)

La siguiente tabla compara la entrega de extracción y de envío:

  Extracción Envío
Extremos Cualquier dispositivo conectado a Internet que tenga credenciales autorizadas puede llamar a la API de Pub/Sub. Un servidor HTTPS con certificado no autofirmado accesible en la Web pública El extremo receptor puede estar desvinculado de la suscripción de Pub/Sub, de modo que los mensajes de varias suscripciones se puedan enviar a un solo extremo.
Balanceo de cargas Varios suscriptores pueden realizar llamadas de extracción a la misma suscripción “compartida”. Cada suscriptor recibirá un subconjunto de los mensajes. El extremo de envío puede ser un balanceador de cargas.
Configuración No es necesaria la configuración. No se necesita ninguna configuración para las aplicaciones de App Engine en el mismo proyecto que el suscriptor.
La configuración (y la verificación) de los extremos de envío es obligatoria en Google Cloud Console para todos los demás extremos. Los extremos deben ser accesibles a través de nombres DNS y tener certificados SSL instalados.
Control de flujo El cliente suscriptor controla la frecuencia de entrega. El suscriptor puede modificar la fecha límite de confirmación de forma dinámica y permitir que el procesamiento de mensajes sea largo de forma arbitraria. El servidor de Pub/Sub implementa el control de flujo de forma automática. No es necesario manejar el flujo de mensajes en el lado del cliente, aunque es posible indicar que el cliente no puede manejar la carga de mensajes actual mediante la transmisión de un error HTTP.
Eficiencia y capacidad de procesamiento Logra una capacidad de procesamiento alta con una CPU y un ancho de banda bajos cuando permite la entrega por lotes y las confirmaciones, así como el consumo masivo paralelo. Si se usan sondeos agresivos para minimizar el tiempo de entrega de mensajes, puede resultar ineficiente. Envía un mensaje por solicitud y limita la cantidad máxima de mensajes pendientes.

Ciclo de vida de una suscripción

Según la configuración predeterminada, las suscripciones vencen después de 31 días de inactividad (por ejemplo, si no hay conexiones activas, solicitudes de extracción ni envíos exitosos). Si Pub/Sub detecta actividad de suscriptores, se reiniciará el reloj de eliminación de suscripciones. Con las políticas de vencimiento de la suscripción, puedes configurar el período de inactividad o hacer que la suscripción sea persistente sin importar la actividad. También puedes borrar una suscripción de forma manual.

Ten en cuenta que, aunque puedes crear una suscripción nueva con el mismo nombre que una que se borró, la suscripción nueva no tiene relación con la anterior. Incluso si la suscripción que se borró tenía una gran cantidad de mensajes no confirmados, una suscripción nueva con un nombre idéntico no tendrá ningún trabajo acumulado (no habrá mensajes esperando la entrega) en el momento en que se cree.

Para obtener más información sobre cómo trabajar con suscripciones, consulta la configuración de suscripciones.