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 la conferma. Tuttavia, a volte potrebbe essere necessario 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 funzionalità di ricerca per eliminare i messaggi non confermati modificando lo stato in Confermato.

Cerca uno snapshot o un timestamp per riprodurre i messaggi in una sottoscrizione. Questa guida mostra esempi di come ripetere i messaggi Pub/Sub confermati in precedenza utilizzando la funzionalità di 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'interfaccia a riga di comando di gcloud

Il modo più semplice per utilizzare gcloud è in Cloud Shell. Puoi anche usare lo strumento a riga di comando fornito con Google Cloud CLI. I prerequisiti di configurazione vengono soddisfatti automaticamente per l'interfaccia a riga di comando gcloud se crei una nuova istanza di macchina Compute Engine con ambiti di accesso che includono tutte le API Cloud e l'immagine Debian predefinita. La il modo più semplice per crearlo è tramite la UI 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.

Creazione e ricerca di 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 non sono stati inviati messaggi nella sottoscrizione riconosciuto. 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 estrazioni 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 consegna 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

Il pull da seek-demo-sub2 ora restituirà i messaggi pubblicati in precedenza seek-demo-sub2 è stato creato:

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

Al termine, esegui la pulizia di:

gcloud pubsub snapshots delete my-snapshot

Esegui la ricerca fino a un timestamp

Un altro modo per riprodurre i messaggi confermati consiste nel cercare timestamp. Per eseguire la ricerca fino a un timestamp, devi prima configurare la sottoscrizione conservano i messaggi confermati utilizzando retain-acked-messages. Se è impostato retain-acked-messages, Pub/Sub conserva i messaggi confermati per 7 giorni.

Devi eseguire questa operazione solo se vuoi eseguire la ricerca fino a un timestamp, non a un senza dover creare 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 la sottoscrizione a ritroso per recuperare il messaggio. Tieni presente che i flag aritmetici delle date sono diversi tra GNU e BSD (MacOS). più versioni 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 data e ora supportati, consulta l'argomento gcloud datetimes.

Un pull successivo 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 all'ora corrente per contrassegnare come confermati tutti 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ù fornito. Puoi verificarlo eseguendo ripetutamente il comando pull senza dare conferma del messaggio:

gcloud pubsub subscriptions pull seek-demo-sub

Utilizzo della console Cloud

Puoi creare snapshot o eseguire ricerche negli snapshot esistenti pagina dei dettagli della console Cloud. Per le regole di denominazione degli snapshot, consulta Nomi delle risorse.

Creazione di uno snapshot in corso

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

    Vai alla pagina 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 Ricerca, seleziona A un punto temporale precedente o A uno snapshot, quindi seleziona il punto temporale o l'istantanea da cercare.

  5. Fai clic su Scorri per riprodurre i messaggi.

Com'è andata?

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

Passaggi successivi

Vedi Ripetizione della visione ed eliminazione dei messaggi.