Volver a reproducir un mensaje en Pub/Sub buscando una instantánea o una marca de tiempo
Pub/Sub no puede recuperar los mensajes después de que los hayas confirmado. Sin embargo, a veces puede que tengas que volver a reproducir los mensajes confirmados, por ejemplo, si has confirmado un mensaje por error. Después, puedes usar la función Buscar para marcar como no confirmados los mensajes que ya se habían confirmado y obligar a Pub/Sub a volver a enviar esos mensajes. También puedes usar la función de búsqueda para eliminar los mensajes no confirmados cambiando su estado a confirmado.
Busca una captura 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 mensajes de Pub/Sub confirmados anteriormente mediante la función de búsqueda.
Para seguir las instrucciones paso a paso de esta tarea directamente en la Google Cloud consola, haga clic en Ayúdame:
Antes de empezar
- 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.
-
Set up a Google Cloud console 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.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Set up a Google Cloud console 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.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
En la Google Cloud consola, ve a la página Suscripciones de Pub/Sub.
Selecciona una suscripción de la lista.
Haz clic en Crear copia.
Introduce un ID para la instantánea y, a continuación, haz clic en Crear para guardar los cambios.
En la Google Cloud consola, ve a la página Suscripciones de Pub/Sub.
Selecciona una suscripción de la lista.
Haz clic en Volver a reproducir mensajes.
En Buscar, selecciona En un momento anterior o En una captura y, a continuación, elige el momento o la captura a los que quieras ir.
Haz clic en Buscar para reproducir los mensajes.
Usar la interfaz de línea de comandos gcloud
La forma más sencilla de usar gcloud es en Cloud Shell . También puedes usar la herramienta de línea de comandos que se incluye en la CLI de Google Cloud. Los requisitos previos de configuración se cumplen automáticamente en la CLI de gcloud si creas una instancia de máquina de Compute Engine nueva con ámbitos de acceso que incluyan todas las APIs de Cloud y la imagen predeterminada de Debian. La forma más sencilla de crearla es mediante la interfaz de Compute Engine. En el resto de este documento, daremos por hecho que utilizas una de estas herramientas de línea de comandos.
Para obtener más información sobre cómo usar gcloud, consulta la guía de inicio rápido de gcloud.
Consulta también la sección gcloud pubsub de la referencia de gcloud para ver una lista completa de los comandos de gcloud
Pub/Sub.
Crear y buscar capturas
Crea un tema y una suscripción. Para mejorar la interactividad, usa un plazo de confirmación corto:
gcloud pubsub topics create seek-demo-topic gcloud pubsub subscriptions create seek-demo-sub --topic=seek-demo-topic --ack-deadline=10
Hasta el momento, no se ha confirmado la recepción de ningún mensaje de la suscripción. Captura este estado creando una captura:
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 solicitudes posteriores no devuelven mensajes nuevos (es posible que haya algunos duplicados transitorios):
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
Puedes recuperar el mensaje buscando la suscripción a la copia. Ten en cuenta que es posible que el mensaje no se entregue al instante: Pub/Sub no garantiza la latencia de entrega de mensajes. Sin embargo, lo que se garantiza es que los mensajes conservados 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 en la misma captura, siempre que el tema de la suscripción sea el mismo que el de la captura:
gcloud pubsub subscriptions create seek-demo-sub2 --topic=seek-demo-topic --ack-deadline=10 gcloud pubsub subscriptions seek seek-demo-sub2 --snapshot=my-snapshot
Al extraer datos de seek-demo-sub2
, ahora se obtendrá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 con la instantánea, haz lo siguiente:
gcloud pubsub snapshots delete my-snapshot
Ir a una marca de tiempo
Otra forma de reproducir los mensajes que se han confirmado es buscar una marca de tiempo. Para ir a una marca de tiempo, primero debes configurar la suscripción para que conserve los mensajes confirmados mediante retain-acked-messages
. Si se define retain-acked-messages
, Pub/Sub conserva los mensajes confirmados durante 7 días.
Solo tienes que seguir este paso si quieres 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
La siguiente extracción no debería devolver ningún mensaje:
gcloud pubsub subscriptions pull seek-demo-sub
Ahora, busca la suscripción hacia atrás en el tiempo para recuperar el mensaje. Ten en cuenta que las marcas de aritmética de fechas difieren entre las versiones GNU y BSD (macOS) del comando date:
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 admitidos, consulta gcloud topic datetimes.
Una extracción posterior debería volver a mostrar el mensaje:
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub
También puedes usar la función de búsqueda para saltar la entrega de todos los mensajes publicados antes de un momento determinado, como la hora actual. Para ello, busca la suscripción en el momento actual para marcar como confirmados todos los mensajes anteriores:
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 un tiempo de propagación (unos 60 segundos), el mensaje dejará de enviarse. Puedes comprobarlo ejecutando repetidamente el comando pull sin confirmar el mensaje:
gcloud pubsub subscriptions pull seek-demo-sub
Usar la consola de Cloud
Puedes crear capturas o buscar capturas en la página de detalles de la suscripción de la consola de Cloud. Para consultar las reglas de nomenclatura de las instantáneas, consulta Nombres de recursos.
Creando una captura
Las copias se pueden ver en la página de copias de la Google Cloud consola. También puedes gestionar las capturas en la página de detalles de un tema concreto.
Volver a reproducir una suscripción
El cuadro de diálogo Volver a reproducir mensajes te permite buscar en un momento anterior o en una captura guardada. Para abrir el cuadro de diálogo, sigue estos pasos:
¿Cómo ha ido?
Ten en cuenta que hay más recursos y enlaces disponibles en la página de asistencia de Pub/Sub.
Siguientes pasos
Consulta Volver a reproducir y descartar mensajes.