Un suscriptor podría no procesar los mensajes por varios motivos. Por ejemplo, el suscriptor podría experimentar problemas temporales para recuperar los datos necesarios o podría recibir un mensaje en un formato inesperado.
Si Pub/Sub intenta entregar un mensaje, pero el suscriptor no puede confirmar la recepción, Pub/Sub vuelve a intentar enviar el mensaje automáticamente. Este intento de reenvío se conoce como política de reintentos de suscripción. Esta no es una función que puedas activar o desactivar. Sin embargo, puedes elegir qué tipo de política de reintentos deseas usar.
Antes de comenzar
- Crea un tema que usarás con tu suscripción que contenga una política de reintentos de suscripción.
Roles obligatorios
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 un proyecto diferente. 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: reenvío inmediato o retirada exponencial. De forma predeterminada, las suscripciones usan el reenvío inmediato.
Reenvío inmediato
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, el reenvío inmediato puede causar problemas. En este caso, es posible que Pub/Sub vuelva a enviar varios mensajes que no se puedan confirmar.
Para abordar los problemas de reintento de entrega 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 en el mensaje, se agrega más tiempo a la demora, hasta llegar a un tiempo máximo de demora (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:
- Cuando se recibe una confirmación de recepción negativa
- Cuando vence el plazo de confirmación de recepción de un mensaje
- La retirada exponencial solo se aplica por mensaje, en lugar de a todos los mensajes de una suscripción (global).
- Mientras usas la retirada exponencial, Pub/Sub continúa entregando otros mensajes, incluso si los mensajes anteriores recibieron confirmaciones de recepción 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 para adaptarse a una incapacidad transitoria de procesar algunos mensajes en el momento de la entrega. La función se aplica según el principio del mejor esfuerzo y cada mensaje se evalúa por separado para la política de reintentos.
No recomendamos usar esta función para introducir retrasos intencionales en la entrega de mensajes. Si confirmas de forma negativa (nack) una gran cantidad de mensajes en una suscripción configurada con una política de reintentos, 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 confirmas de forma negativa 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 mediante los siguientes pasos:
- En la Google Cloud consola de, ve a la página Suscripciones de Pub/Sub.
Haz clic en Crear suscripción.
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 los Lineamientos para asignar un nombre a un tema o una suscripción.
- Elige o crea un tema desde el menú desplegable.
La suscripción recibe mensajes del tema.
Selecciona un Tipo de entrega.
En Política de reintentos, selecciona Reintentar después de la retirada exponencial.
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.
- Haz clic en Crear.
gcloud
Para crear una suscripción nueva con una política de reintentos de retirada exponencial, ejecuta
el siguiente gcloud pubsub create
comando.
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 de retirada mínima para la suscripción.MAX_RETRY_DELAY: Es la demora de retirada máxima para la suscripción.
¿Qué sigue?
- Obtén los mensajes reenviados que no se pueden entregar.
- Supervisa aplicaciones de Pub/Sub.
- Aprende conceptos de entrega de mensajes.