Después de confirmar los mensajes en Pub/Sub, el cliente suscriptor ya no puede acceder a ellos. Además, los clientes suscriptores deben procesar todos los mensajes de una suscripción, incluso si solo se necesita un subconjunto.
La función Búsqueda 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 en otra mediante la búsqueda en combinación con una instantánea.
Para obtener una demostración rápida de cómo funcionan 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 una vista duradera, coherente y confiable de un momento determinado del estado de confirmación (ack) del mensaje de una suscripción. Una instantánea registra el estado de confirmación de todos los mensajes dentro de una suscripción en el momento de su creación. Una instantánea retiene los mensajes no confirmados de la suscripción de origen en el momento de la creación de la instantánea y cualquier mensaje publicado en el tema después de que se crea la instantánea.
El ciclo de vida de una instantánea se determina según las tareas pendientes existentes de la suscripción de origen. 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, imagina una instantánea de una suscripción con una tarea pendiente en la que el mensaje no confirmado más antiguo tiene 1 día de antigüedad. La instantánea vence después de 6 días. Esta línea de tiempo es necesaria para que las instantáneas ofrezcan garantías de entrega sólidas al menos una vez.
El ciclo de vida máximo 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 su creación.
La función de búsqueda te permite buscar una instantánea o una marca de tiempo específicas para una suscripción. Esta función te permite controlar cómo Pub/Sub puede entregar mensajes desde un momento específico o desde una instantánea específica.
Para buscar una hora anterior y volver a reproducir mensajes ya confirmados, debes configurar la retención de mensajes en el tema o configurar la suscripción para que retenga los mensajes confirmados. Para obtener más información, consulta lo siguiente:
Coherencia eventual de las operaciones de búsqueda
Las operaciones de búsqueda son estrictamente coherentes con respecto a la garantía de entrega de mensajes. Esto significa que cualquier mensaje que se convertirá en no confirmado en función de la condición de búsqueda, se entregará, al menos una vez, después de que la operación de búsqueda tenga éxito. 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 un sistema de coherencia eventual con respecto a la operación de búsqueda: la operación puede tardar hasta un minuto para surtir efecto.
Casos de uso para las 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.
Crea 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 Google Cloud consola, ve a la página Instantáneas.
Haz clic en Crear instantánea.
En Selecciona una suscripción a Pub/Sub, selecciona una suscripción.
En ID de instantánea, 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 creas una instantánea inmediatamente después de crear una suscripción, es posible que recibas un error debido a la demora de propagación de la suscripción recién creada.
gcloud
Para crear una instantánea, usa el
siguiente
gcloud pubsub snapshots create
comando:
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 debido a los siguientes motivos:
Un posible sesgo del reloj entre los servidores Pub/Sub
El hecho de que Pub/Sub tenga que trabajar con el hora 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 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 Google Cloud consola, ve a la Suscripción página.
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 En un momento anterior.
Selecciona una fecha y hora adecuadas y, luego, haz clic en Buscar.
gcloud
Para buscar una marca de tiempo, usa el
siguiente
gcloud pubsub subscriptions seek
comando:
gcloud pubsub subscriptions seek SUBSCRIPTION_ID \ --time=TIME \
Reemplaza lo siguiente:
- TIME: Es el horario en el 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 mensajes no confirmados si usas una instantánea para buscar cualquiera de las suscripciones del 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 de 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 una instantánea, sigue estos pasos:
En la Google Cloud consola, ve a la Suscripción página.
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 En una instantánea.
Selecciona una instantánea adecuada y, luego, haz clic en Buscar.
gcloud
Para buscar una instantánea, usa el
siguiente
gcloud pubsub subscriptions seek
comando:
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.
Busca 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.
Busca 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.
Busca 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.
Busca con entrega de "exactamente una vez"
Si buscas mensajes en una suscripción con entrega de "exactamente una vez", Pub/Sub reenvía los mensajes confirmados anteriormente que son aptos para la entrega. Fallará cualquier confirmación de una entrega realizada antes de la operación de búsqueda. Las operaciones de búsqueda tienen coherencia eventual.
Para obtener más información sobre las políticas de reintento, consulta Entrega "exactamente una vez".