Volver a reproducir y borrar definitivamente mensajes con la función de búsqueda

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 de búsqueda extiende las capacidades del suscriptor lo 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 en un 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 edad de la persona más antigua no confirmado en 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 realiza correctamente. Sin embargo, los mensajes entregados no se sea coherente 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. Puedes configurar un tema retención de mensajes si deseas que los mensajes se retengan para volver a reproducirlos durante un tiempo determinado mayor que la retención de mensajes configurada en la suscripción. En este actual, el proyecto del tema y el proyecto de la suscripción se cobran el almacenamiento de mensajes según su configuración de retención de mensajes.

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 cualquier suscripción adjunta al tema para buscar en el tiempo y volver a reproducir mensajes recibidos previamente hasta la clase message_retention_duration La retención de mensajes por tema también permite que una suscripción vuelva a reproducir mensajes que son publicados antes de crear una suscripción.

Un tema puede retener mensajes publicados durante un máximo de 31 días (configurable por la propiedad message_retention_duration del tema) incluso después de que se confirmaron en todas las suscripciones adjuntas. 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:

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

    Ir a la página Temas

  2. Haga clic en Crear tema.

  3. En el campo ID de tema, ingresa un ID para tu tema.

  4. Habilita la opción Establecer la duración de retención de mensajes.

    Deja las otras opciones de configuración con sus valores predeterminados.

  5. 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.

  6. 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:

  1. Selecciona tu tema en la página de temas de Pub/Sub.

    Ir a la página Temas

  2. Haz clic en Editar en la parte superior de la página de detalles del tema.

  3. 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

  4. 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 la 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 7 días en una suscripción. Esta configuración se aplica confirmados y no confirmados. Sin embargo, los mensajes se pueden retener en un suscripción por más de 7 días si se configuró la duración de retención de mensajes sobre este tema es superior a 7 días.

Si una suscripción se configura para retener los mensajes confirmados, los costos de almacenamiento de los mensajes confirmados que retiene la suscripción se facturan al proyecto de la suscripción.

Console

Para crear una suscripción con la retención de mensajes confirmados habilitada, sigue estos pasos:

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

    Ir a la página Suscripciones

  2. Haz clic en Crear suscripción.

  3. En el campo ID de suscripción, ingresa un ID para tu suscripción.

  4. Usa el menú desplegable Duración de la retención de mensajes para seleccionar la cantidad de días, horas y minutos que se deben conservar los mensajes.

  5. Habilita la opción Conservar mensajes confirmados. Deja las otras opciones de configuración con sus valores predeterminados.

  6. 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:

  1. Selecciona tu suscripción en la página Suscripciones de Pub/Sub.

    Ir a la página Suscripciones

  2. Haz clic en Editar en la parte superior de la página de detalles de la suscripción.

  3. 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.

  4. 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 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:

  1. En la consola de Google Cloud, ve a la página Instantáneas.

    Ir a la página Instantáneas

  2. Haz clic en Crear instantánea.

  3. En Selecciona una suscripción a Pub/Sub, elige una suscripción.

  4. En ID de instantánea (Snapshot ID), ingresa un nombre para la instantánea.

    Para obtener más información sobre cómo asignar un nombre a los recursos de Pub/Sub, consulta Lineamientos para asignar nombres a temas, suscripciones, esquemas o instantáneas.

  5. Haz clic en Crear para crear la instantánea.

También puedes crear un resumen en 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 una hora en el futuro.

  • Para volver a reproducir y procesar mensajes ya confirmados, busca un en el pasado.

Pub/Sub genera la hora de publicación del mensaje servidores (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 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:

  1. En la consola de Google Cloud, ve a la página Suscripción.

    Ir a la página de suscripción

  2. Haz clic en una suscripción que tenga habilitada la retención de mensajes.

  3. En la página de detalles de la suscripción, haz clic en Volver a reproducir mensajes.

  4. En Buscar, haz clic en A un momento anterior.

  5. 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 una sola 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 admitidos, consulta gcloud topic datetimes.

Saltar a 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 expiraría 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:

  1. En la consola de Google Cloud, ve a la página Suscripción.

    Ir a la página de suscripción

  2. Haz clic en una suscripción.

  3. En la página de detalles de la suscripción, haz clic en Volver a reproducir mensajes.

  4. En Buscar, haz clic en A una instantánea.

  5. Selecciona una instantánea adecuada y haz clic en Buscar.

gcloud

Para buscar una instantánea, usa el siguiendo 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.

Buscar 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:

  1. El plazo de confirmación de recepción vence o el suscriptor envía una confirmación de recepción negativa.
  2. Pub/Sub reenvía el mensaje.

Para obtener más información sobre las políticas de reintento, consulta Usa políticas de reintento.

Buscar con entrega “exactamente una vez”

Si buscas mensajes en una suscripción con entrega “exactamente una vez”, Pub/Sub reenvía los mensajes ya confirmados que se apto para la entrega. Cualquier confirmación de una entrega realizada antes de la búsqueda la operación, fallará. Las operaciones de búsqueda están coherencia eventual.

Para obtener más información sobre las políticas de reintento, consulta Entrega “exactamente una vez”.