Riproduci di nuovo 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 dover riprodurre i messaggi confermati, ad esempio se hai eseguito una conferma errata. A questo punto, puoi utilizzare la funzionalità Cerca per contrassegnare come non confermati i messaggi confermati in precedenza e forzare Pub/Sub a recapitarli. Puoi anche utilizzare la ricerca per eliminare i messaggi non confermati impostando il loro stato su Confermato.

Cerca 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 console Google Cloud, 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. 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

Utilizzo dell'gcloudinterfaccia a riga di comando

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 l'interfaccia alla gcloud CLI se crei una nuova istanza di macchina Compute Engine con ambiti di accesso che includono tutte le API Cloud e l'immagine Debian predefinita. Il modo più semplice per crearlo è tramite l'interfaccia utente di Compute Engine. Per il resto di questo documento, assumeremo che tu stia utilizzando uno di questi strumenti a riga di comando.

Per ulteriori informazioni sull'utilizzo di gcloud, consulta la guida rapida di gcloud. Consulta anche la sezione gcloud pubsub della documentazione di riferimento di gcloud per un elenco completo dei comandi gcloud Pub/Sub.

Creare e andare agli snapshot

Crea un argomento e una sottoscrizione. Per una maggiore interattività, utilizza una scadenza breve per il conferma:

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, esegui il pull 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 successivi pull 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 allo 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 nell'istantanea verranno eventualmente recapitati 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 allo stesso snapshot, a condizione che l'argomento della sottoscrizione corrisponda a quello 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

Ora l'estrazione da seek-demo-sub2 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 le operazioni di 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 eseguire la ricerca fino a un timestamp, devi prima configurare l'abbonamento in modo da conservare i messaggi confermati utilizzando retain-acked-messages. Se è impostato retain-acked-messages, Pub/Sub conserva i messaggi confermati per 7 giorni.

Devi eseguire questo passaggio solo se intendi eseguire ricerche fino a un timestamp, non a uno snapshot.

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

Ora pubblica, esegui il pull e conferma un messaggio:

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

Il successivo pull non deve 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 aritmetici delle date sono diversi tra le versioni GNU e BSD (MacOS) del comando data:

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 data e ora supportati, consulta l'argomento gcloud datetimes.

Un successivo estrazione dovrebbe restituire di nuovo il messaggio:

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

Puoi anche utilizzare la ricerca per saltare l'invio di tutti i messaggi pubblicati prima di un determinato momento, ad esempio l'ora corrente. Per farlo, cerca l'abbonamento fino all'ora corrente 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 ritardo di propagazione di circa 60 secondi, il messaggio non verrà più recapitato. Puoi verificarlo eseguendo ripetutamente il comando pull senza confermare il messaggio:

gcloud pubsub subscriptions pull seek-demo-sub

Utilizzo della console Cloud

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

Creazione di uno snapshot in corso

  1. Nella console Google Cloud, vai alla pagina Abbonamenti 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, quindi 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.

Riprodurre di nuovo un abbonamento

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

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

    Vai alla pagina degli abbonamenti

  2. Seleziona un abbonamento dall'elenco.

  3. Fai clic su Riproduci messaggi.

  4. In Esegui ricerca, seleziona A un punto temporale precedente o A uno snapshot, quindi seleziona il punto temporale o lo snapshot a cui eseguire la ricerca.

  5. Fai clic su Scorri per riprodurre i messaggi.

Com'è andata?

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

Passaggi successivi

Vedi Ripetizione della visione ed eliminazione dei messaggi.