Política de reintentos de suscripción

Es posible que un suscriptor no pueda procesar mensajes por varios motivos. Por ejemplo, el suscriptor podría tener problemas temporales para recuperar los datos necesarios o recibir un mensaje en un formato inesperado.

Si Pub/Sub intenta entregar un mensaje, pero el suscriptor no puede confirmarlo, Pub/Sub intentará automáticamente volver a enviar el mensaje. Este intento de reenvío se conoce como política de reintentos de suscripción. Esta no es una función que puedes activar o desactivar. Sin embargo, puedes elegir el tipo de política de reintentos que deseas usar.

Antes de comenzar

  • Crea un tema que usarás con tu suscripción que contiene una política de reintentos de suscripción.

Roles requeridos

Para obtener los permisos que necesitas para administrar temas y suscripciones, pídele a tu administrador que te otorgue el rol de IAM de editor de Pub/Sub(roles/pubsub.editor) en tu proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Puedes configurar el control de acceso a nivel de proyecto y a nivel de los recursos individuales. Puedes crear una suscripción en un proyecto y adjuntarla a un tema ubicado en otro proyecto. Asegúrate de tener los permisos necesarios para cada proyecto.

Tipos de políticas de reintentos

Cuando creas y configuras tu suscripción por primera vez, puedes elegir usar una de las siguientes políticas de reintentos: entrega inmediata o retirada exponencial. De forma predeterminada, las suscripciones usan el reintento de entrega inmediato.

Reentrega inmediata

De forma predeterminada, Pub/Sub intenta reenviar el mensaje de inmediato (y, posiblemente, al mismo cliente suscriptor). Sin embargo, si las condiciones que impidieron la confirmación de recepción del mensaje no cambiaron, la entrega inmediata puede causar problemas. En este caso, es posible que Pub/Sub reenvíe varios mensajes que no se pueden confirmar.

Para abordar los problemas de reenvío inmediato, Pub/Sub te permite configurar una política de retirada exponencial.

Retirada exponencial

La retirada exponencial te permite agregar retrasos cada vez más largos entre los reintentos. Después de la primera falla de la entrega, Pub/Sub espera un tiempo de retirada mínimo antes de reintentarlo. Por cada falla consecutiva del mensaje, se agrega más tiempo a la demora, hasta llegar a una demora máxima (0 y 600 segundos).

Los intervalos de demora máximo y mínimo no son fijos y deben configurarse en función de los factores locales de tu aplicación.

Ten en cuenta las siguientes consideraciones sobre la retirada exponencial:

  • La retirada exponencial se activa en las siguientes acciones:
    • Se envía cuando se recibe una confirmación negativa.
    • Cuando vence el plazo de confirmación de recepción de un mensaje
  • La espera exponencial solo se aplica por mensaje, no a todos los mensajes de una suscripción (global).
  • Mientras usa la retirada exponencial, Pub/Sub sigue entregando otros mensajes, incluso si los mensajes anteriores recibieron confirmaciones negativas (a menos que uses la entrega de mensajes ordenada).

Usa la política de reintentos para retrasar la entrega y el procesamiento de un subconjunto de mensajes y así tener en cuenta una incapacidad transitoria para procesar algunos mensajes en el momento de la entrega. La función se aplica en base al mejor esfuerzo, y cada mensaje se evalúa por separado para la política de reintentos.

No recomendamos usar esta función para introducir demoras intencionales en la entrega de mensajes. Si envías una confirmación de recepción negativa (nack) de una gran cantidad de mensajes en una suscripción configurada con una política de reintento, es posible que algunos de esos mensajes se entreguen con menos o sin retirada. Pub/Sub también puede ralentizar la entrega de todos los mensajes si envías una confirmación negativa de una gran cantidad de mensajes.

Si necesitas programar entregas, considera usar Cloud Tasks.

Configura la retirada exponencial

Console

Cuando creas una suscripción nueva, puedes configurar una política de reintentos de retirada exponencial con los siguientes pasos:

  1. En la consola de Google Cloud , ve a la página Suscripciones de Pub/Sub.

Ir a las suscripciones

  1. Haz clic en Crear suscripción.

  2. En el campo ID de suscripción, ingresa un nombre.

Para obtener información sobre cómo asignar un nombre a una suscripción, consulta Lineamientos para asignar un nombre a un tema o una suscripción.

  1. Elige o crea un tema desde el menú desplegable.

La suscripción recibe mensajes del tema.

  1. Selecciona un Tipo de entrega.

  2. En Política de reintentos, selecciona Reintentar después de la retirada exponencial.

  3. Ingresa una retirada mínima y una retirada máxima entre 0 y 600 segundos.

Los valores predeterminados son 10 segundos para la retirada mínima y 600 segundos para la retirada máxima.

  1. Haz clic en Crear.

gcloud

Para crear una suscripción nueva con una política de reintentos de retirada exponencial, ejecuta el siguiente comando gcloud pubsub create.

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --min-retry-delay=MIN_RETRY_DELAY \
  --max-retry-delay=MAX_RETRY_DELAY

Reemplaza lo siguiente:

  • SUBSCRIPTION_ID: Es un ID único para tu suscripción.
  • TOPIC_ID: Es el ID del tema al que deseas adjuntar la suscripción.
  • MIN_RETRY_DELAY: Es la demora mínima de reintento para la suscripción.
  • MAX_RETRY_DELAY: Es la demora máxima de reintento para la suscripción.

¿Qué sigue?