Riproduci un messaggio in Pub/Sub eseguendo la ricerca fino a uno snapshot o un timestamp

Pub/Sub non può recuperare i messaggi dopo che li hai confermati. Tuttavia, a volte potresti ritenere necessario riprodurre i messaggi confermati, ad esempio se hai eseguito una conferma errata. Poi puoi utilizzare la funzionalità Cerca per contrassegnare i messaggi confermati in precedenza come non confermati e forzare Pub/Sub a inviarli di nuovo. Puoi anche utilizzare la ricerca per eliminare i messaggi non riconosciuti modificandone lo stato in riconosciuto.

Esegui la ricerca fino a uno snapshot o un timestamp per riprodurre i messaggi in una sottoscrizione. Questa guida mostra esempi di come riprodurre i messaggi Pub/Sub confermati in precedenza utilizzando la ricerca.


Per seguire le indicazioni dettagliate per questa attività direttamente nella Google Cloud console, fai clic su Procedura guidata:

Procedura guidata


Prima di iniziare

  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. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. 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.

  7. Install the Google Cloud CLI.

  8. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  9. To initialize the gcloud CLI, run the following command:

    gcloud init

Utilizzo dell'interfaccia a riga di comando gcloud

Il modo più semplice per utilizzare gcloud è in Cloud Shell . Puoi anche utilizzare lo strumento a riga di comando fornito con Google Cloud CLI. I prerequisiti di configurazione vengono soddisfatti automaticamente per la gcloud CLI se crei un'istanza macchina Compute Engine nuova di zecca con ambiti di accesso che includono tutte le API Cloud e l'immagine Debian predefinita. Il modo più semplice per crearlo è tramite la UI di Compute Engine. Per il resto di questo documento, presupporremo che tu stia utilizzando uno di questi strumenti a riga di comando.

Per saperne di più sull'utilizzo di gcloud, consulta la guida rapida di gcloud. Consulta anche la sezione gcloud pubsub nella documentazione di riferimento di gcloud per un elenco completo dei comandi Pub/Sub gcloud.

Creare snapshot e spostarsi tra questi

Crea un argomento e una sottoscrizione. Per una migliore interattività, utilizza una scadenza di conferma breve:

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

Finora, nessun messaggio nella sottoscrizione è stato confermato. Acquisisci questo stato creando uno snapshot:

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

Ora pubblica, recupera e conferma un messaggio:

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

Tieni presente che i pull successivi non generano nuovi messaggi (sono possibili alcuni duplicati temporanei):

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

Puoi recuperare il messaggio cercando l'abbonamento nello snapshot. Tieni presente che il messaggio potrebbe non essere recapitato immediatamente: Pub/Sub non garantisce la latenza di recapito dei messaggi. Tuttavia, è garantito che i messaggi conservati nello snapshot verranno alla fine consegnati almeno una volta:

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

Tieni presente che puoi cercare altre sottoscrizioni nello stesso snapshot, a condizione che l'argomento della sottoscrizione sia lo stesso dell'argomento dello snapshot:

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

Il recupero da seek-demo-sub2 ora restituirà i messaggi pubblicati prima della creazione di seek-demo-sub2:

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

Al termine dello snapshot, esegui la pulizia:

gcloud pubsub snapshots delete my-snapshot

Esegui la ricerca fino a un timestamp

Un altro modo per riprodurre i messaggi confermati è cercare un timestamp. Per cercare un timestamp, devi prima configurare la sottoscrizione in modo da conservare i messaggi confermati utilizzando retain-acked-messages. Se retain-acked-messages è impostato, Pub/Sub conserva i messaggi confermati per 7 giorni.

Devi eseguire questo passaggio solo se intendi cercare un timestamp, non uno snapshot.

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

Ora pubblica, recupera e conferma un messaggio:

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

Il pull successivo non dovrebbe restituire messaggi:

gcloud pubsub subscriptions pull seek-demo-sub

Ora cerca l'abbonamento a ritroso nel tempo per recuperare il messaggio. Tieni presente che i flag di calcolo delle date sono diversi tra le versioni GNU e 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)

Per ulteriori informazioni sui formati di ora supportati, vedi gcloud topic datetimes.

Un'estrazione successiva dovrebbe restituire di nuovo il messaggio:

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

Puoi anche utilizzare la ricerca per saltare la pubblicazione di tutti i messaggi pubblicati prima di un determinato momento, ad esempio l'ora attuale. Per farlo, cerca la sottoscrizione fino all'ora attuale per contrassegnare come confermati tutti i messaggi precedenti:

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

Dopo un certo ritardo di propagazione (~60 secondi), il messaggio non verrà più recapitato. Puoi verificarlo eseguendo ripetutamente il comando pull senza confermare la ricezione del messaggio:

gcloud pubsub subscriptions pull seek-demo-sub

Utilizzo della console Cloud

Puoi creare snapshot o cercare snapshot esistenti nella pagina dei dettagli dell'abbonamento della console Cloud. Per le regole di denominazione degli snapshot, consulta Nomi delle risorse.

Creazione di uno snapshot in corso

  1. Nella Google Cloud console, vai alla pagina Sottoscrizioni Pub/Sub.

    Vai alla pagina degli abbonamenti

  2. Seleziona un abbonamento dall'elenco.

  3. Fai clic su Crea snapshot.

  4. Inserisci un ID per lo snapshot, poi fai clic su Crea per salvare.

Gli snapshot possono essere visualizzati nella pagina Snapshot nella console Google Cloud . Puoi anche gestire gli snapshot nella pagina dei dettagli di un singolo argomento.

Riproduzione di un abbonamento

La finestra di dialogo Riproduci messaggi ti consente di eseguire la ricerca fino a un punto temporale precedente o uno snapshot salvato. Per aprire la finestra di dialogo:

  1. Nella Google Cloud console, vai alla pagina Sottoscrizioni Pub/Sub.

    Vai alla pagina degli abbonamenti

  2. Seleziona un abbonamento dall'elenco.

  3. Fai clic su Riproduci messaggi.

  4. In Cerca, seleziona Fino a un punto temporale precedente o Fino a uno snapshot, poi seleziona il punto temporale o lo snapshot in cui eseguire la ricerca.

  5. Fai clic su Cerca per riprodurre i messaggi.

Com'è andata?

Tieni presente che risorse e link aggiuntivi sono disponibili nella pagina di assistenza Pub/Sub.

Passaggi successivi

Vedi Ripetizione della visione ed eliminazione dei messaggi.