Busca una instantánea o una marca de tiempo para volver a reproducir un mensaje en Pub/Sub

Pub/Sub no puede recuperar los mensajes después de que los confirmas. Sin embargo, a veces es posible que debas volver a reproducir los mensajes confirmados, por ejemplo, si realizaste un mensaje de confirmación erróneo. Luego, puedes usar la función Buscar para marcar los mensajes que se confirmaron como no confirmados y forzar a Pub/Sub a volver a entregarlos. También puedes usar el búsqueda para borrar los mensajes no confirmados cambiando su estado a confirmado.

Busca una instantánea o una marca de tiempo para volver a reproducir los mensajes de una suscripción. En esta guía, se muestran ejemplos de cómo volver a reproducir los mensajes de Pub/Sub confirmados anteriormente con el salto.


Para seguir la guía paso a paso en esta tarea directamente en la consola de Google Cloud, haz clic en Guiarme:

GUIARME


Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Set up a Google Cloud console project.

    Set up a project

    Click to:

    • Create or select a project.
    • Enable the Pub/Sub API for that project.

    You can view and manage these resources at any time in the Google Cloud console.

  3. Install the Google Cloud CLI.
  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Set up a Google Cloud console project.

    Set up a project

    Click to:

    • Create or select a project.
    • Enable the Pub/Sub API for that project.

    You can view and manage these resources at any time in the Google Cloud console.

  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init

Usa la interfaz de línea de comandos de gcloud

La forma más fácil de usar gcloud es en Cloud Shell. También puedes usar la herramienta de línea de comandos que viene con Google Cloud CLI. Los requisitos previos de configuración se cumplen automáticamente para gcloud CLI si crear una nueva Instancia de máquina de Compute Engine con permisos de acceso que incluyan todas las API de Cloud y la imagen predeterminada de Debian. La forma más sencilla de crearla es mediante la IU de Compute Engine. Para el resto de este documento, suponemos que usas una de estas herramientas de línea de comandos.

Para obtener más información sobre el uso de gcloud, consulta la guía de inicio rápido de gcloud. Consulta también la sección de pubsub de gcloud en la referencia de gcloud para obtener una lista completa de comandos de gcloud de Pub/Sub.

Crea y busca instantáneas

Crea un tema y una suscripción. Para una mejor interactividad, usa un plazo de confirmación de recepción breve:

gcloud pubsub topics create seek-demo-topic
gcloud pubsub subscriptions create seek-demo-sub --topic=seek-demo-topic --ack-deadline=10

Hasta ahora no se confirmó ningún mensaje en la suscripción. Captura este estado mediante la creación de una instantánea:

gcloud pubsub snapshots create my-snapshot --subscription=seek-demo-sub
gcloud pubsub snapshots list

Ahora publica, extrae y confirma un mensaje:

gcloud pubsub topics publish seek-demo-topic --message 'hello, world'
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub

Ten en cuenta que las extracciones posteriores no generan mensajes nuevos (es posible que se produzcan algunos duplicados transitorios):

gcloud pubsub subscriptions pull --auto-ack seek-demo-sub

Para recuperar el mensaje, busca la suscripción a la instantánea. Ten en cuenta que es posible que el mensaje no se entregue de inmediato: Pub/Sub no garantiza la latencia de entrega de mensajes. Sin embargo, lo que sí garantiza es que los mensajes retenidos en la instantánea se entregarán al menos una vez:

gcloud pubsub subscriptions seek seek-demo-sub --snapshot=my-snapshot
gcloud pubsub subscriptions pull seek-demo-sub --auto-ack

Ten en cuenta que puedes buscar otras suscripciones a la misma instantánea, siempre que el tema de la suscripción sea el mismo que el de la instantánea:

gcloud pubsub subscriptions create seek-demo-sub2 --topic=seek-demo-topic --ack-deadline=10
gcloud pubsub subscriptions seek seek-demo-sub2 --snapshot=my-snapshot

Cuando realizas una extracción desde seek-demo-sub2, se mostrarán los mensajes que se publicaron antes de que se creara seek-demo-sub2:

gcloud pubsub subscriptions pull seek-demo-sub2 --auto-ack

Cuando hayas terminado de usar la instantánea, realiza una limpieza:

gcloud pubsub snapshots delete my-snapshot

Busca una marca de tiempo

Otra forma de volver a reproducir mensajes confirmados es buscar una marca de tiempo. Para buscar una marca de tiempo, primero debes configurar la suscripción con retain-acked-messages a fin de que retenga los mensajes confirmados. Si se configura retain-acked-messages, Pub/Sub retiene los mensajes confirmados por 7 días.

Solo debes realizar este paso si deseas buscar una marca de tiempo, no una instantánea.

gcloud pubsub subscriptions update seek-demo-sub --retain-acked-messages

Ahora publica, extrae y confirma un mensaje:

gcloud pubsub topics publish seek-demo-topic --message 'hello, world'
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub

Con la siguiente extracción, no debería aparecer ningún mensaje:

gcloud pubsub subscriptions pull seek-demo-sub

Ahora busca la suscripción según la fecha para recuperar el mensaje. Ten en cuenta que las marcas aritméticas de fecha difieren entre las versiones GNU y BSD (MacOS) del comando de fecha:

export TS_FORMAT=%Y-%m-%dT%H:%M:%SZ
gcloud pubsub subscriptions seek seek-demo-sub --time=$(date -u -d '-10 min' +$TS_FORMAT)

Para obtener más información sobre los formatos de hora compatibles, consulta gcloud topic datetimes.

Una extracción posterior debería volver a generar el mensaje:

gcloud pubsub subscriptions pull --auto-ack seek-demo-sub

También puedes usar la función de búsqueda para omitir la entrega de todos los mensajes publicados antes de un momento determinado, como la hora actual. Para hacerlo, busca la suscripción a la hora actual a fin de marcar todos los mensajes anteriores como confirmados:

gcloud pubsub topics publish seek-demo-topic --message 'hello, world'
gcloud pubsub subscriptions seek seek-demo-sub --time=$(date -u +$TS_FORMAT)

Después de cierto retraso de propagación (~60 segundos), el mensaje ya no se entregará. Para verificar esto, ejecuta el comando de extracción de forma repetida sin confirmar el mensaje:

gcloud pubsub subscriptions pull seek-demo-sub

Usa la consola de Cloud

Puedes crear instantáneas o buscar instantáneas existentes, en la suscripción página de detalles de la consola de Cloud. Para ver las reglas de nombres de instantáneas, consulta la sección sobre nombres de recursos.

Crea una instantánea

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

    Ir a la página Suscripciones

  2. Selecciona una suscripción de la lista.

  3. Haz clic en Crear instantánea.

  4. Ingresa un ID para la instantánea y, luego, haz clic en Crear para guardarla.

Las instantáneas se pueden ver en la página de instantáneas en la consola de Google Cloud. También puedes administrar las instantáneas en la página de detalles de un tema individual.

Cómo volver a reproducir una suscripción

El diálogo Replay messages te permite buscar un momento anterior o una instantánea guardada. Para abrir el diálogo, haz lo siguiente:

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

    Ir a la página Suscripciones

  2. Selecciona una suscripción de la lista.

  3. Haz clic en Repetir mensajes.

  4. En Buscar, selecciona A un momento anterior o A una instantánea y, luego, selecciona el momento o la instantánea que deseas buscar.

  5. Haz clic en Buscar para volver a reproducir los mensajes.

¿Cómo fue?

Ten en cuenta que hay recursos y vínculos adicionales disponibles en la página de asistencia de Pub/Sub.

¿Qué sigue?

Consulta la página sobre cómo volver a reproducir y descartar mensajes.