Guía de inicio rápido: vuelve a reproducir mensajes

En esta guía, se muestran ejemplos de cómo volver a reproducir los mensajes de la API de Pub/Sub.

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 el SDK de Cloud. Los requisitos previos de configuración del SDK de Cloud se cumplen de forma automática si creas una instancia de máquina de Compute Engine nueva, con niveles 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. De forma predeterminada, los mensajes se retienen durante 7 días. Puedes configurar la duración para que sea más corta (pero menor a 10 minutos) con message-retention-duration. Para obtener más información, consulta la sección sobre cómo buscar una marca de tiempo en la página sobre cómo volver a reproducir y descartar mensajes.

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:

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

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 Cloud Console

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

En el cuadro de diálogo de búsqueda, aparece la opción de búsqueda de hora o de una instantánea:

También puedes administrar las instantáneas en la página de detalles de un tema individual:

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