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 de una suscripción determinada no pueden acceder a los mensajes confirmados. 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 la funcionalidad 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 una suscripción en otra mediante la búsqueda en combinación con una Instantánea.

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

¿Cómo funciona?

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 buscar un horario en el futuro para borrar definitivamente mensajes. 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 horario de llegada de la solicitud de publicación en lugar de hacerlo cuando ocurre un evento en el sistema de origen

Si deseas buscar un horario anterior, primero debes configurar tu suscripción para retener los mensajes confirmados:

  • Un mensaje confirmado se retiene en una suscripción solo si la propiedad retain_acked_messages de la suscripción se configura como verdadera (el valor predeterminado es falso), hasta la message_retention_duration después de la publicación (el valor predeterminado es de 7 días). Los mensajes confirmados se retienen solo si se confirman después de que la retain_acked_messages de la suscripción se configura como true.
  • Un mensaje no confirmado se retiene en una suscripción hasta la message_retention_duration después de su publicación (el valor predeterminado es de 7 días).
  • Las propiedades retain_acked_messages y message_retention_duration de una suscripción pueden especificarse cuando esta se crea o actualizarse para una suscripción existente.

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 código nuevo de suscriptor, en caso de que necesites solucionar 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 la 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 se vence después de seis días, en lugar de siete. Esta línea de tiempo es necesaria para que las instantáneas ofrezcan garantías de entrega sólidas 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 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 prácticos

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

Busca temas de mensajes no entregados y políticas de reintentos

Si buscas mensajes en una suscripción con un tema de mensajes no entregados, Pub/Sub configura los intentos de entrega en 0.

Si buscas mensajes en una suscripción con una política de reintentos, 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.

Qué sigue

Puedes usar Pub/Sub con Dataflow. Sin embargo, no recomendamos el acceso directo a la búsqueda de Pub/Sub desde una canalización de Dataflow en ejecución. Para obtener información sobre el flujo de trabajo recomendado, consulta la página sobre cómo usar la función de búsqueda de Cloud Pub/Sub con Dataflow.