Después de que confirmas los mensajes en Pub/Sub, estos se convierten inaccesible para el cliente suscriptor. Además, los clientes suscriptores deben procesar todos los mensajes de una suscripción, incluso si solo se necesita un subconjunto.
La función Buscar amplía las capacidades del suscriptor, ya que te permite modificar el estado de confirmación de los mensajes de forma masiva. Por ejemplo, puedes reproducir mensajes ya confirmados o borrar definitivamente mensajes de forma masiva. Además, puedes copiar el estado de confirmación de una suscripción a otro usando la función de saltar en combinación con una instantánea.
Para ver una demostración rápida de cómo operan estas funciones, consulta Busca una instantánea o una marca de tiempo para volver a reproducir un mensaje en Pub/Sub.
Descripción general de instantáneas y búsquedas
Una instantánea de Pub/Sub es un recurso duradero, coherente y confiable vista de un momento determinado del estado de confirmación (confirmación) del mensaje de una suscripción. Una instantánea registra el estado de confirmación de todos los mensajes de una suscripción en el momento de su creación. Una instantánea conserva el mensajes no confirmados de la suscripción de origen en el momento de la creación de la instantánea y todos los mensajes publicados en el tema después de que esta crear.
La vida útil de una instantánea está determinada por las tareas pendientes existentes de la fuente suscripción. El ciclo de vida es igual a 7 días menos la antigüedad del mensaje no confirmado más antiguo de la suscripción. Por ejemplo, considera una instantánea de una suscripción con una tarea pendiente en la que el mensaje sin confirmar más antiguo es de 1 día viejo. La instantánea vence después de 6 días. Este cronograma es necesario para las instantáneas para ofrecer una sólida garantía de entrega al menos una vez.
La vida útil máxima posible de una instantánea es de siete días. No puedes crear una instantánea que venza en menos de 1 hora después de hora de su creación.
La función de búsqueda te permite buscar una instantánea o marca de tiempo específica para un suscripción. Esta función permite controlar cómo Pub/Sub puede entregar mensajes de un momento específico o de una instantánea en particular.
Para buscar una hora anterior y volver a reproducir mensajes ya confirmados, primero debes configurar la retención de mensajes en el tema o configurar la suscripción para que retenga los mensajes confirmados.
Coherencia eventual de las operaciones de búsqueda
Las operaciones de búsqueda son estrictamente coherentes con respecto a la entrega del mensaje. garantía. Es decir, cualquier mensaje que no se confirme en la condición de búsqueda se entregará finalmente después de que la operación de búsqueda se realice correctamente. Sin embargo, los mensajes enviados no son coherentes de inmediato con la operación de búsqueda. Por lo tanto, un mensaje que se publicó antes de la marca de tiempo de búsqueda o que se confirmó en una instantánea podría entregarse después de la operación de búsqueda. En cierto sentido, la entrega de mensajes funciona como sistema de coherencia eventual con respecto a la operación de búsqueda; puede tardar hasta que la operación se aplique por completo.
Casos de uso para operaciones de búsqueda
- Actualiza el código de suscriptor de forma segura. Un problema con la implementación de un nuevo código de suscriptor es que el ejecutable nuevo puede confirmar mensajes de forma errónea, lo que puede provocar la pérdida de mensajes. La incorporación de instantáneas en el proceso de implementación te permite recuperarte antes errores en el nuevo código de suscriptor.
- Recupérate ante problemas inesperados de suscriptores. En los casos en los que los problemas del suscriptor no estén asociados con un evento de implementación específico, es posible que no tengas una instantánea relevante. En ese caso, si habilitaste la retención de mensajes confirmados para una suscripción, la búsqueda de un horario anterior te brinda una forma de recuperarte ante el error.
- Reduce los costos y el tiempo de procesamiento. Realiza una confirmación masiva de una gran cantidad de mensajes pendientes que ya no son relevantes.
- Prueba el código del suscriptor en datos conocidos. Cuando se prueba el rendimiento y la coherencia del código del suscriptor, es útil usar los mismos datos en cada ejecución. Las instantáneas son compatibles con datos coherentes con una semántica sólida. Además, las instantáneas se pueden aplicar a cualquier suscripción a un tema determinado, incluso una nueva.
Configura la retención de mensajes
Puedes configurar la retención de mensajes de un tema y configurar cualquiera de sus suscripciones para retener los mensajes confirmados. Te recomendamos que configures la retención de mensajes del tema si deseas que los mensajes se conserven durante más tiempo que la retención de mensajes configurada en la suscripción. En esta situación, se cobra al proyecto del tema y al proyecto de suscripción por el almacenamiento de mensajes según su configuración de retención de mensajes correspondiente.
Si la retención de mensajes de temas no está configurada, un mensaje no confirmado
se borrará de la suscripción cuando su antigüedad supere la
message_retention_duration
. Por otro lado, si el mensaje por tema
se configura la retención, el mensaje sin confirmar se borra del
suscripción solo cuando su antigüedad exceda el máximo de la configuración del tema y el
message_retention_duration
de la suscripción.
Configura la retención de mensajes por temas
De forma predeterminada, un tema de Pub/Sub descarta los mensajes en cuanto los reconocen todas las suscripciones adjuntas al tema.
Configurar un tema con retención de mensajes te brinda más flexibilidad, lo que permite que cualquier suscripción adjunta al tema pueda realizar búsquedas en el tiempo y volver a reproducir mensajes ya confirmados hasta el message_retention_duration
del tema.
La retención de mensajes por tema también permite que una suscripción vuelva a reproducir mensajes que se publican antes de que crees una suscripción.
Un tema puede retener los mensajes publicados durante un máximo de 31 días (configurable por la propiedad message_retention_duration
del tema), incluso después de que todas las suscripciones adjuntas los hayan confirmado. En los casos en que el estado
message_retention_duration
es mayor que el de la suscripción
message_retention_duration
, Pub/Sub descarta un mensaje solo cuando
su edad supera la message_retention_duration
del tema.
Si la retención de mensajes por temas está habilitada, los costos de almacenamiento de los mensajes retenidos por tema se facturan al proyecto del tema.
Console
Para crear un tema con la retención de mensajes habilitada, sigue estos pasos:
En la consola de Google Cloud, ve a la página Temas de Pub/Sub.
Haga clic en Crear tema.
En el campo ID de tema, ingresa un ID para tu tema.
Habilita Establecer la duración de la retención de mensajes.
Deja las otras opciones de configuración con sus valores predeterminados.
En el menú desplegable Duración de la retención de mensajes, selecciona la la cantidad de días, horas y minutos necesarios para retener los mensajes.
Haz clic en Crear tema para guardar el tema.
Para actualizar la configuración de retención de mensajes de un tema, haz lo siguiente:
Selecciona tu tema en la página de temas de Pub/Sub.
Haz clic en Editar en la parte superior de la página de detalles del tema.
Ajusta el tiempo de retención o habilita o inhabilita la retención de mensajes mediante marcar o desmarcar la opción Habilitar la retención de mensajes
Haz clic en Actualizar para guardar los cambios en el tema.
gcloud
Para crear un tema con una duración de retención de mensajes de 7 días, usa el siguiente comando gcloud pubsub topics create
:
gcloud pubsub topics create TOPIC_ID --message-retention-duration=7d
Puedes actualizar esta configuración mediante gcloud pubsub topics update
. Esto también te permite habilitar la retención de mensajes para un tema existente:
gcloud pubsub topics update TOPIC_ID --message-retention-duration=1d
También puedes inhabilitar la retención de mensajes para un tema con el comando update
:
gcloud pubsub topics update TOPIC_ID --clear-message-retention-duration
Configura la retención de mensajes de suscripción
Pub/Sub comienza a retener mensajes en nombre de una suscripción cuando
se crea la suscripción. De forma predeterminada, Pub/Sub descarta un
mensaje de una suscripción en cuanto se confirme la recepción.
Los mensajes no confirmados se conservan durante un período predeterminado de 7 días (configurable por
el elemento message_retention_duration
de la suscripción
propiedad).
Configurar una suscripción para retener los mensajes confirmados (mediante el
retain_acked_messages
te permite volver a reproducir mensajes ya confirmados
que retiene la suscripción. Puedes configurar que los mensajes se retengan durante un
un máximo de 31 días en una suscripción. Esta configuración se aplica a los mensajes confirmados y no confirmados.
Si se configura una suscripción para que retenga los mensajes confirmados, los costos de almacenamiento de los mensajes confirmados que retenga la suscripción se facturarán al proyecto de la suscripción.
Console
Para crear una suscripción con la retención de mensajes confirmados habilitada, sigue estos pasos:
En la consola de Google Cloud, ve a la página de suscripciones a Pub/Sub.
Haz clic en Crear suscripción.
En el campo ID de suscripción, ingresa un ID para tu suscripción.
Usa el menú desplegable Duración de la retención de mensajes para seleccionar la cantidad de días, horas y minutos que deseas retener los mensajes.
Habilita la opción Retener mensajes confirmados. Deja las otras opciones de configuración con sus valores predeterminados.
Haz clic en Crear suscripción para guardar la suscripción.
Para actualizar la configuración de la retención de mensajes de una suscripción, haz lo siguiente:
Selecciona tu suscripción en la página Suscripciones de Pub/Sub.
Haz clic en Editar en la parte superior de la página de detalles de la suscripción.
Ajusta la duración de retención de mensajes o habilita o inhabilita la retención de mensajes confirmados los mensajes, marcando o desmarcando el campo Retención de mensajes confirmados mensajes.
Haz clic en Actualizar para guardar los cambios en la suscripción.
gcloud
Para crear una suscripción con la retención de mensajes confirmados habilitada, usa el siguiente comando gcloud pubsub subscriptions create
:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --retain-acked-messages --message-retention-duration=5d
Puedes actualizar esta configuración mediante gcloud pubsub subscriptions update
. Esto también te permite habilitar la retención de mensajes confirmados para una cuenta
suscripción:
gcloud pubsub subscriptions update SUBSCRIPTION_ID --message-retention-duration=1d
También puedes inhabilitar la retención de mensajes confirmados para una suscripción con el comando update
:
gcloud pubsub subscriptions update SUBSCRIPTION_ID --no-retain-acked-messages
Crear una instantánea
Puedes crear una instantánea con la consola, las APIs de Google o Google Cloud CLI.
Console
Para crear una instantánea, sigue estos pasos:
En la consola de Google Cloud, ve a la página Instantáneas.
Haz clic en Crear instantánea.
En Selecciona una suscripción de Pub/Sub, selecciona una suscripción.
En ID de instantánea (Snapshot ID), ingresa un nombre para la instantánea.
Para obtener más información sobre cómo asignar nombres a los recursos de Pub/Sub, consulta Lineamientos para asignar nombres a temas, suscripciones, esquemas o instantáneas.
Haz clic en Crear para crear la instantánea.
También puedes crear una instantánea desde la página Suscripciones. Si crear una instantánea inmediatamente después de crear una suscripción, es posible que obtengas debido a la demora en la propagación de la suscripción recién creada.
gcloud
Para crear una instantánea, usa la
siguiendo
gcloud pubsub snapshots create
:
gcloud pubsub snapshots create \ --project=PROJECT_ID \ --subscription=SUBSCRIPTION_ID \ SNAPSHOT_ID
Reemplaza lo siguiente:
PROJECT_ID
: Especifica el ID del proyecto.SUBSCRIPTION_ID
Especifica el ID de la suscripción.SNAPSHOT_ID
Especifica el ID de la instantánea.
Busca una marca de tiempo
Cuando se busca un horario, se marcan todos los mensajes recibidos por Pub/Sub antes de ese horario como confirmados y todos los mensajes recibidos después como no confirmados.
Puedes realizar los siguientes tipos de operaciones de búsqueda según las marcas de tiempo:
Para borrar definitivamente todos los mensajes, puedes buscar un horario en el futuro.
Para volver a reproducir y procesar mensajes ya confirmados, busca un horario anterior.
Los servidores de Pub/Sub generan el horario de publicación del mensaje (consulta publishTime
en la referencia de la API). Este enfoque es impreciso por los siguientes motivos:
Un posible sesgo del reloj entre los servidores Pub/Sub
El hecho de que Pub/Sub tenga que trabajar con el horario de llegada de la solicitud de publicación en lugar de hacerlo cuando ocurre un evento en el sistema de origen
Puedes buscar una marca de tiempo con la consola, las APIs de Google o la CLI de Google Cloud CLI. Antes de buscar una marca de tiempo en una suscripción, asegúrate de que la retención de mensajes esté habilitada en la suscripción.
Console
Para buscar una marca de tiempo, sigue estos pasos:
En la consola de Google Cloud, ve a la página Suscripción.
Haz clic en una suscripción que tenga habilitada la retención de mensajes.
En la página de detalles de la suscripción, haz clic en Repetir mensajes.
En Buscar, haz clic en A un momento anterior.
Selecciona una fecha y hora adecuadas y, luego, haz clic en Buscar.
gcloud
Para buscar una marca de tiempo, usa el
siguiendo
gcloud pubsub subscriptions seek
:
gcloud pubsub subscriptions seek SUBSCRIPTION_ID \ --time=TIME \
Reemplaza lo siguiente:
- TIME: Es la hora a la que deseas realizar la operación de búsqueda.
- SUBSCRIPTION_ID: Es el ID de la suscripción.
Para obtener más información sobre los formatos de hora compatibles, consulta gcloud topic datetimes.
Busca una instantánea
Puedes volver a reproducir los mensajes no confirmados con una instantánea para buscar cualquier de las suscripciones al tema.
A diferencia de la búsqueda de un horario, no necesitas realizar ninguna configuración de suscripción especial para buscar una instantánea. Solo debes crear la instantánea con anticipación. Por ejemplo, puedes crear una instantánea cuando implementes un código nuevo de suscriptor, en caso de que necesites solucionar confirmaciones inesperadas o erróneas.
Si las tareas pendientes en la suscripción son demasiado antiguas y la instantánea resultante vence en menos de 1 hora, la operación de búsqueda falla.
Puedes buscar una instantánea con la consola, las APIs de Google o Google Cloud CLI.
Console
Para buscar un resumen, sigue estos pasos:
En la consola de Google Cloud, ve a la página Suscripción.
Haz clic en una suscripción.
En la página de detalles de la suscripción, haz clic en Repetir mensajes.
En Buscar, haz clic en A una instantánea.
Selecciona una instantánea adecuada y, luego, haz clic en Buscar.
gcloud
Para buscar una instantánea, usa el siguiente comando gcloud pubsub subscriptions seek
:
gcloud pubsub subscriptions seek SUBSCRIPTION_ID \ --snapshot=SNAPSHOT_ID
Reemplaza lo siguiente:
- SNAPSHOT_ID: Es el ID de una instantánea. El tema de la instantánea debe ser el mismo que el de la suscripción.
- SUBSCRIPTION_ID: Es el ID de la suscripción.
Búsqueda con filtros
Puedes volver a reproducir mensajes de suscripciones con filtros. Si buscas una marca de tiempo con una suscripción con un filtro, el servicio de Pub/Sub solo vuelve a entregar los mensajes que coincidan con el filtro.
Una instantánea de una suscripción con un filtro contiene los siguientes mensajes:
- Todos los mensajes más nuevos que la instantánea, incluidos los mensajes que no coinciden con el filtro.
- Mensajes no confirmados que son más antiguos que la instantánea.
Si buscas una instantánea mediante una suscripción con un filtro, el servicio de Pub/Sub solo vuelve a entregar los mensajes en la instantánea que coinciden con el filtro de la suscripción que realiza la solicitud de búsqueda.
Para obtener más información sobre los filtros, consulta Filtra mensajes.
Buscar con temas de mensajes no entregados
Si buscas mensajes en una suscripción con un tema de mensajes no entregados, Pub/Sub establece los intentos de entrega como 0
. Los mensajes que recibes de estas suscripciones tienen un campo que cuenta la cantidad de intentos de entrega.
Para obtener más información sobre los temas de mensajes no entregados, consulta Reenvío a temas de mensajes no entregados.
Búsqueda con políticas de reintento
Si buscas mensajes en una suscripción con una política de reintento, Pub/Sub restablece el retraso entre lo siguiente:
- El plazo de confirmación de recepción vence o el suscriptor envía una confirmación de recepción negativa.
- Pub/Sub reenvía el mensaje.
Para obtener más información sobre las políticas de reintento, consulta Usa políticas de reintento.
Salto con entrega “exactamente una vez”
Si buscas mensajes en una suscripción con una entrega única, Pub/Sub vuelve a enviar los mensajes confirmados anteriormente que sean apto para la entrega. Los acuse de recibo de una entrega realizada antes de la operación de búsqueda fallarán. Las operaciones de búsqueda están coherencia eventual.
Para obtener más información sobre las políticas de reintento, consulta Entrega única exacta.