Un suscriptor puede no 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 enviar un mensaje, pero el suscriptor no puede confirmarlo, Pub/Sub intenta volver a enviar el mensaje automáticamente. Este intento de reenvío se conoce como política de reintentos de suscripción. No es una función que puedas activar o desactivar. Sin embargo, puedes elegir el tipo de política de reintentos que quieras usar.
Antes de empezar
- Crea un tema que vayas a usar con tu suscripción que contenga una política de reintentos de suscripción.
Roles obligatorios
Para obtener los permisos que necesitas para gestionar temas y suscripciones,
pide a tu administrador que te conceda el
rol de gestión de identidades y accesos Editor de Pub/Sub(roles/pubsub.editor
)
en tu proyecto.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Puede configurar el control de acceso a nivel de proyecto y de recurso individual. Puedes crear una suscripción en un proyecto y adjuntarla a un tema ubicado en otro proyecto. Asegúrate de que tienes los permisos necesarios para cada proyecto.
Tipos de políticas de reintentos
Cuando creas y configuras tu suscripción por primera vez, puedes elegir una de las siguientes políticas de reintento: entrega inmediata o retroceso exponencial. De forma predeterminada, las suscripciones usan la retransmisión inmediata.
Reenvío inmediato
De forma predeterminada, Pub/Sub intenta reenviar el mensaje inmediatamente (y, posiblemente, al mismo cliente suscriptor). Sin embargo, si las condiciones que han impedido la confirmación del mensaje no han cambiado, la retransmisión inmediata puede provocar problemas. En este caso, es posible que Pub/Sub vuelva a enviar varios mensajes que no se pueden confirmar.
Para solucionar los problemas de reenvío inmediato, Pub/Sub te permite configurar una política de retroceso exponencial.
Tiempo de espera exponencial
El tiempo de espera exponencial te permite añadir retrasos cada vez más largos entre los intentos. Tras el primer fallo de entrega, Pub/Sub espera un tiempo de interrupción mínimo antes de volver a intentarlo. Por cada fallo consecutivo de un mensaje, se añade más tiempo al retraso, hasta un retraso máximo (0 y 600 segundos).
Los intervalos de retraso 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 el tiempo de espera exponencial:
- El tiempo de espera exponencial se activa en las siguientes acciones:
- Cuando se recibe una confirmación negativa.
- Cuando vence el plazo de confirmación de un mensaje.
- El retroceso exponencial solo se aplica por mensaje, en lugar de a todos los mensajes de una suscripción (global).
- Mientras se usa la retirada exponencial, Pub/Sub sigue enviando otros mensajes, aunque los mensajes anteriores hayan recibido confirmaciones negativas (a menos que uses el envío de mensajes ordenado).
Usa la política de reintentos para retrasar el envío y el procesamiento de un subconjunto de mensajes y así hacer frente a la imposibilidad transitoria de procesar algunos mensajes al recibirlos. La función se aplica de la mejor forma posible y cada mensaje se evalúa por separado según la política de reintentos.
No recomendamos usar esta función para introducir retrasos intencionados en la entrega de mensajes. Si envías una confirmación negativa (nack) de un gran número de mensajes en una suscripción configurada con una política de reintentos, es posible que algunos de esos mensajes se entreguen con un tiempo de espera menor o sin él. Pub/Sub también puede ralentizar la entrega de todos los mensajes si envías un gran número de confirmaciones negativas.
Si necesitas programar entregas, te recomendamos que uses Cloud Tasks.
Configurar el tiempo de espera exponencial
Consola
Cuando creas una suscripción, puedes configurar una política de reintentos con retroceso exponencial siguiendo estos pasos:
- En la Google Cloud consola, ve a la página Suscripciones de Pub/Sub.
Haz clic en Crear suscripción.
En el campo ID de suscripción, introduce un nombre.
Para obtener información sobre cómo asignar un nombre a una suscripción, consulta las directrices para asignar un nombre a un tema o a una suscripción.
- Elige o crea un tema en el menú desplegable.
La suscripción recibe mensajes del tema.
Seleccione un Tipo de publicación.
En Política de reintentos, seleccione Reintentar después de un tiempo de espera exponencial.
Introduce un Tiempo de espera mínimo y un Tiempo de espera máximo entre 0 y 600 segundos.
Los valores predeterminados son 10 segundos para el tiempo de espera mínimo y 600 segundos para el tiempo de espera máximo.
- Haz clic en Crear.
gcloud
Para crear una suscripción con una política de reintentos con tiempo de espera 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
Haz los cambios siguientes:
SUBSCRIPTION_ID
: un ID único de tu suscripción.TOPIC_ID
: el ID del tema al que quieres adjuntar la suscripción.MIN_RETRY_DELAY
: el retraso mínimo del tiempo de espera de la suscripción.MAX_RETRY_DELAY
: el tiempo de espera máximo de la suscripción.
Siguientes pasos
- Recibir los mensajes reenviados que no se han podido entregar.
- Monitorizar aplicaciones de Pub/Sub.
- Consulta los conceptos de entrega de mensajes.