Vuelve a reproducir y borra definitivamente mensajes

Las API de datos de suscriptores de Pub/Sub, como extracción, proporcionan acceso limitado a los datos de los mensajes. Por lo general, los suscriptores confirmados no pueden acceder a los mensajes confirmados para una suscripción determinada. 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 extiende la funcionalidad del suscriptor, ya que te permite alterar el estado de confirmación de los mensajes de forma masiva. Por ejemplo, puedes volver a reproducir los mensajes confirmados con anterioridad o borrar definitivamente mensajes de forma masiva. Además, puedes copiar el estado de una suscripción a otra si usas la combinación de búsquedas con Snapshot.

Estas funciones se describen a continuación. Sin embargo, puedes consultar la guía de inicio rápido para ver un ejemplo funcional.

Configura la retención de mensajes

Para buscar una hora pasada y volver a reproducir los mensajes confirmados previamente, primero debes configurar la retención de mensajes en el tema o configurar la suscripción para conservar los mensajes confirmados.

Retención de mensajes por temas

De forma predeterminada, un tema de Pub/Sub descarta los mensajes en cuanto las 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 retroceda en el tiempo y vuelva a reproducir mensajes ya confirmados. La retención de mensajes por temas también permite que una suscripción vuelva a reproducir los mensajes publicados antes de crearse una.

Si la retención de mensajes por temas está habilitada, los costos de almacenamiento para los mensajes retenidos por el tema se facturan al proyecto del tema.

Console

Para crear un tema con la retención de mensajes habilitada, sigue estos pasos:

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

    Ir a la página de temas

  2. Haga clic en Crear tema.

  3. En el campo ID del tema, ingresa un ID del tema.

  4. Marca la casilla Establecer la duración de la retención de mensajes. Deje las otras opciones en su configuración predeterminada.

  5. Usa los menús desplegables debajo de Duración de la retención de mensajes para seleccionar la cantidad de días, horas y minutos que deseas conservar 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, sigue estos pasos:

  1. Selecciona tu tema desde la página de Temas de Pub/Sub.

    Ir a la página de temas

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

  3. Para ajustar el tiempo de retención o habilitar o inhabilitar la retención de mensajes, marca o desmarca la casilla que aparece junto a 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 de gcloud:

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

Retención de mensajes de suscripción

De forma predeterminada, las suscripciones descartan los mensajes apenas se confirman. Los mensajes no confirmados se conservan durante 7 días de manera predeterminada (configurable por la propiedad message_retention_duration de la suscripción). Configurar una suscripción para conservar los mensajes confirmados (a través de la propiedad retain_acked_messages) te permite volver a reproducir los mensajes confirmados previamente que se enviaron a la suscripción.

Si se configura una suscripción para conservar los mensajes confirmados, los costos de almacenamiento de estos mensajes se facturarán al proyecto de la suscripción.

Console

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

  1. En Cloud Console, ve a la página Suscripciones de Pub/Sub.

    Ir a la página de suscripciones

  2. Haz clic en Crear suscripción.

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

  4. Usa los menús desplegables debajo de Duración de la retención de mensajes para seleccionar la cantidad de días, horas y minutos que deseas conservar los mensajes.

  5. Marca la casilla Conservar los mensajes confirmados. Deje las otras opciones en su configuración predeterminada.

  6. Haz clic en Crear suscripción para guardarla.

Sigue estos pasos para actualizar la configuración de retención de mensajes de una suscripción:

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

    Ir a la página de suscripciones

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

  3. Para ajustar la duración de la retención de mensajes o habilitar o inhabilitar la retención de mensajes confirmados, marca o desmarca la casilla con la etiqueta Conservar los mensajes confirmados.

  4. Haz clic en Actualizar para guardar los cambios de la suscripción.

gcloud

Para crear una suscripción con retención de mensajes confirmados habilitados, usa el siguiente comando de gcloud:

gcloud pubsub subscriptions create SUBSCRIPTION_ID
    --retain_acked_messages=true
    --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 suscripción existente:

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 --retain_acked_messages=false

Busca una marca de tiempo

Cuando se busca una hora, se marcan todos los mensajes recibidos por Pub/Sub antes de la hora como confirmados y todos los mensajes recibidos después de esta hora como no confirmados. Puedes buscar un momento en el futuro para borrar definitivamente los mensajes. Para volver a reproducir y procesar mensajes confirmados previamente, busca un momento en el pasado. Los servidores de Pub/Sub generan la hora 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 horario de llegada de la solicitud de publicación en lugar de hacerlo cuando ocurre un evento en el sistema de origen

Busca una instantánea

La función de instantánea te permite capturar el estado de confirmación del mensaje de una suscripción. Una vez que se crea una instantánea, conserva lo siguiente:

  • Todos los mensajes no confirmados en la suscripción de origen en el momento en que se creó la instantánea

  • Todos los mensajes publicados en el tema a partir de ese momento

Puedes volver a reproducir estos 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 nuevo código de suscriptor en caso de que necesites recuperarte de confirmaciones inesperadas o erróneas.

Las instantáneas se vencen y se borran en los siguientes casos (lo que ocurra primero):

  • La instantánea alcanza una vida útil de siete días.
  • El mensaje no confirmado más antiguo de la instantánea supera el valor de message retention duration.

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 un día de antigüedad. La instantánea vence después de seis días, en lugar de siete. Este cronograma es necesario para que las instantáneas ofrezcan garantías sólidas de entrega al menos una vez.

Coherencia eventual

Las operaciones de búsqueda son estrictamente coherentes con respecto a las garantías 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 reconoce 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 en relación con la operación de búsqueda: la operación puede tardar hasta un minuto en aplicarse por completo.

Busca con filtros

Puedes usar filtros para volver a reproducir mensajes de suscripciones. Si buscas una marca de tiempo mediante una suscripción con un filtro, el servicio de Pub/Sub solo vuelve a entregar los mensajes que coinciden con el filtro.

Una instantánea de una suscripción con un filtro contiene los siguientes mensajes:

  • Todos los mensajes más recientes que la instantánea, incluidos los mensajes que no coinciden con el filtro
  • Mensajes no confirmados que sean 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 coincidan 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.

Búsqueda 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 calcula 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.

Buscar con políticas de reintento

Si buscas mensajes en una suscripción con una política de reintentos, Pub/Sub restablece el retraso entre los siguientes eventos:

  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 vuelve a enviar el mensaje.

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

Casos de uso

  • 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 nuevo ejecutable puede confirmar mensajes de forma errónea, lo que puede provocar la pérdida de mensajes. Incorporar instantáneas en el proceso de implementación te permite recuperarte de los errores en el nuevo código de suscriptor.
  • Recupérate ante problemas inesperados de suscriptores. En los casos en que los problemas con el suscriptor no estén asociados con un evento de implementación específico, es posible que no tengas una instantánea relevante. En este caso, si habilitaste la retención de mensajes confirmados para una suscripción, buscar un momento del pasado te dará una forma de recuperarte del 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, incluido un recién creado.

¿Qué sigue?

Puedes usar Pub/Sub con Dataflow. Sin embargo, no recomendamos el acceso directo a Pub/Sub Seek desde una canalización de Dataflow en ejecución. Para el flujo de trabajo recomendado, consulta Usa Pub/Sub con Dataflow.