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. Quindi puoi utilizzare la funzionalità Seek per contrassegnare i messaggi confermati in precedenza come non confermati e forzare Pub/Sub a recapitarli di nuovo. Puoi anche utilizzare la funzionalità di ricerca per eliminare i messaggi non confermati modificando lo stato in confermato.

Esegui la ricerca fino a uno snapshot o esegui una ricerca fino a 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. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Configura un progetto nella console.

    Configurare un progetto

    Fai clic per:

    • Crea o seleziona un progetto.
    • Abilita l'API Pub/Sub per quel progetto.

    Puoi visualizzare e gestire queste risorse in qualsiasi momento nella console.

  3. Installa Google Cloud CLI.
  4. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  5. Configura un progetto nella console.

    Configurare un progetto

    Fai clic per:

    • Crea o seleziona un progetto.
    • Abilita l'API Pub/Sub per quel progetto.

    Puoi visualizzare e gestire queste risorse in qualsiasi momento nella console.

  6. Installa Google Cloud CLI.
  7. Per initialize gcloud CLI, esegui questo comando:

    gcloud init

Utilizzo dell'interfaccia a riga di comando di 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 sono soddisfatti automaticamente per gcloud CLI se crei un'istanza della 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. Nella parte restante del documento, supporremo 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 pubsub di gcloud nel riferimento di gcloud per un elenco completo dei comandi gcloud Pub/Sub.

Creazione e ricerca di snapshot

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

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

Finora non è stato confermato nessun messaggio nella sottoscrizione. 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 pull successivi non restituiscono nuovi messaggi (sono possibili alcuni duplicati temporanei):

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

Puoi recuperare il messaggio cercando la sottoscrizione allo snapshot. Tieni presente che il messaggio potrebbe non essere recapitato immediatamente: Pub/Sub non garantisce la latenza di consegna del messaggio. Tuttavia, è garantito che i messaggi conservati nello snapshot alla fine vengano 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 nello stesso snapshot, purché l'argomento della sottoscrizione sia uguale all'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 pull 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, esegui la pulizia di:

gcloud pubsub snapshots delete my-snapshot

Esegui la ricerca fino a un timestamp

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

Devi eseguire questa operazione solo se intendi eseguire la ricerca 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 pull successivo non dovrebbe 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 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, consulta gcloud topic datetimes.

Un pull successivo dovrebbe restituire di nuovo il messaggio:

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

Puoi anche utilizzare la funzionalità di ricerca per saltare il recapito di tutti i messaggi pubblicati prima di un determinato momento, ad esempio l'ora attuale. A tale scopo, cerca la sottoscrizione 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 nella propagazione (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 eseguire ricerche degli 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 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, poi fai clic su Crea per salvare.

Puoi visualizzare gli snapshot nella pagina degli snapshot della 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 un'istantanea salvata. Per aprire la finestra di dialogo:

  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 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 Cerca per riprodurre i messaggi.

Com'è andata?

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

Passaggi successivi

Vedi Riprodurre di nuovo ed eliminare i messaggi.