Riprodurre e eliminare i messaggi con la ricerca

Dopo aver confermato i messaggi in Pub/Sub, questi diventano inaccessibili al client sottoscrittore. Inoltre, i client sottoscrittori devono elaborare ogni messaggio in una sottoscrizione, anche se è necessario solo un sottoinsieme.

La funzionalità di ricerca estende le funzionalità del sottoscrittore consentendoti di modificare lo stato di conferma dei messaggi in blocco. Ad esempio, puoi riprodurre i messaggi confermati in precedenza o eliminarli in blocco. Inoltre, puoi copiare lo stato di conferma di una sottoscrizione in un'altra utilizzando la ricerca in combinazione con uno snapshot.

Per una rapida dimostrazione del funzionamento di queste funzionalità, consulta Riprodurre un messaggio in Pub/Sub eseguendo la ricerca fino a uno snapshot o un timestamp.

Panoramica di snapshot e ricerca

Uno snapshot Pub/Sub è una visualizzazione point-in-time durevole, coerente e affidabile dello stato di conferma (ack) dei messaggi di una sottoscrizione. Uno snapshot registra lo stato di conferma di tutti i messaggi all'interno di una sottoscrizione al momento della sua creazione. Uno snapshot conserva i messaggi non confermati della sottoscrizione di origine al momento della creazione dello snapshot e tutti i messaggi pubblicati nell'argomento dopo la creazione dello snapshot.

La durata di uno snapshot è determinata dal backlog esistente della sottoscrizione di origine. La durata è pari a 7 giorni meno l'età del messaggio non confermato meno recente nella sottoscrizione. Prendiamo ad esempio uno snapshot di una sottoscrizione con un backlog in cui il messaggio non confermato meno recente ha 1 giorno. Lo snapshot scade dopo 6 giorni. Questa sequenza temporale è necessaria affinché gli snapshot offrano una solida garanzia di consegna "at-least-once".

La durata massima possibile di uno snapshot è di sette giorni. Non puoi creare uno snapshot che scada meno di 1 ora dopo la sua creazione.

La funzionalità di ricerca ti consente di cercare uno snapshot o un timestamp specifico per una sottoscrizione. Questa funzionalità ti consente di controllare in che modo Pub/Sub può recapitare i messaggi da un punto temporale specifico o da uno snapshot specifico.

Per cercare un punto temporale nel passato e riprodurre i messaggi confermati in precedenza, devi configurare la conservazione dei messaggi nell'argomento o configurare la sottoscrizione in modo da conservare i messaggi confermati. Per ulteriori informazioni, consulta le seguenti risorse:

Coerenza finale delle operazioni di ricerca

Le operazioni di ricerca sono rigorosamente coerenti per quanto riguarda la garanzia di recapito dei messaggi. Ciò significa che tutti i messaggi che devono diventare non confermati in base alla condizione di ricerca verranno sicuramente recapitati dopo il completamento dell'operazione di ricerca. Tuttavia, i messaggi recapitati non diventano immediatamente coerenti con l'operazione di ricerca. Pertanto, un messaggio pubblicato prima del timestamp di ricerca o confermato in uno snapshot potrebbe essere recapitato dopo l'operazione di ricerca. In un certo senso, il recapito dei messaggi funziona come un sistema a coerenza finale rispetto all'operazione di ricerca; potrebbe essere necessario fino a un minuto prima che l'operazione abbia effetto completo.

Casi d'uso per le operazioni di ricerca

  • Aggiornare il codice del sottoscrittore in modo sicuro. Un problema relativo al deployment di un nuovo codice del sottoscrittore è che il nuovo eseguibile potrebbe confermare erroneamente i messaggi, causando la perdita di messaggi. L'incorporamento degli snapshot nel processo di deployment ti consente di recuperare i bug nel nuovo codice del sottoscrittore.
  • Recuperare da problemi imprevisti del sottoscrittore. Nei casi in cui i problemi del sottoscrittore non sono associati a un evento di deployment specifico, potresti non avere uno snapshot pertinente. In questo caso, se hai attivato la conservazione dei messaggi confermati per una sottoscrizione, la ricerca di un punto temporale nel passato ti consente di recuperare l'errore.
  • Risparmiare tempo e costi di elaborazione. Esegui una conferma collettiva su un backlog di messaggi di grandi dimensioni che non sono più pertinenti.
  • Testare il codice del sottoscrittore su dati noti. Quando si testa il codice del sottoscrittore per prestazioni e coerenza, è utile utilizzare gli stessi dati in ogni esecuzione. Gli snapshot consentono di avere dati coerenti con una semantica solida. Inoltre, gli snapshot possono essere applicati a qualsiasi sottoscrizione di un determinato argomento, inclusa una appena creata.

Creare uno snapshot

Puoi creare uno snapshot utilizzando la console, le API di Google o Google Cloud CLI.

Console

Per creare uno snapshot:

  1. Nella Google Cloud console, vai alla pagina Snapshot.

    Vai alla pagina degli snapshot

  2. Fai clic su Crea snapshot.

  3. In Seleziona una sottoscrizione Pub/Sub, seleziona una sottoscrizione.

  4. In ID snapshot, inserisci un nome per lo snapshot.

    Per saperne di più su come denominare le risorse Pub/Sub, consulta Linee guida per la denominazione di un argomento, una sottoscrizione, uno schema o uno snapshot.

  5. Fai clic su Crea per creare lo snapshot.

Puoi anche creare uno snapshot dalla pagina Sottoscrizioni. Se crei uno snapshot subito dopo aver creato una sottoscrizione, potresti ricevere un errore a causa del ritardo di propagazione della sottoscrizione appena creata.

gcloud

Per creare uno snapshot, utilizza il seguente gcloud pubsub snapshots create comando:

gcloud pubsub snapshots create \
    --project=PROJECT_ID \
    --subscription=SUBSCRIPTION_ID \
    SNAPSHOT_ID

Sostituisci quanto segue:

  • PROJECT_ID. Specifica l'ID del progetto.

  • SUBSCRIPTION_ID. Specifica l'ID della sottoscrizione.

  • SNAPSHOT_ID. Specifica l'ID dello snapshot.

Eseguire la ricerca fino a un timestamp

Quando esegui la ricerca fino a un timestamp, tutti i messaggi ricevuti da Pub/Sub prima di quell'ora vengono contrassegnati come confermati, mentre tutti i messaggi ricevuti successivamente vengono contrassegnati come non confermati.

Puoi eseguire i seguenti tipi di operazioni di ricerca in base ai timestamp:

  • Per eliminare definitivamente tutti i messaggi, puoi cercare un punto temporale nel futuro.

  • Per riprodurre ed elaborare nuovamente i messaggi confermati in precedenza, cerca un punto temporale nel passato.

L'ora di pubblicazione del messaggio viene generata dai server Pub/Sub (vedi publishTime nel riferimento API). Questo approccio è impreciso per i seguenti motivi:

  • Possibile distorsione dell'orologio tra i server Pub/Sub.

  • Il fatto che Pub/Sub deve lavorare con l'ora di arrivo della richiesta di pubblicazione anziché con l'ora in cui si è verificato un evento nel sistema di origine.

Puoi cercare un timestamp utilizzando la console, le API di Google o Google Cloud CLI. Prima di cercare un timestamp in una sottoscrizione, assicurati che la conservazione dei messaggi sia attivata nella sottoscrizione.

Console

Per cercare un timestamp:

  1. Nella Google Cloud console, vai alla pagina Sottoscrizione.

    Vai alla sottoscrizione

  2. Fai clic su una sottoscrizione per cui è attivata la conservazione dei messaggi.

  3. Nella pagina dei dettagli della sottoscrizione, fai clic su Riproduci messaggi.

  4. In Cerca, fai clic su Fino a un punto temporale precedente.

  5. Seleziona una data e un'ora appropriate, quindi fai clic su Cerca.

gcloud

Per cercare un timestamp, utilizza il seguente gcloud pubsub subscriptions seek comando:

gcloud pubsub subscriptions seek SUBSCRIPTION_ID \
    --time=TIME \

Sostituisci quanto segue:

  • TIME: l'ora fino alla quale vuoi eseguire l' operazione di ricerca.
  • SUBSCRIPTION_ID: l'ID della sottoscrizione.

Per saperne di più sui formati di ora supportati, consulta gcloud topic datetimes.

Eseguire la ricerca fino a uno snapshot

Puoi riprodurre i messaggi non confermati utilizzando uno snapshot per cercare una delle sottoscrizioni dell'argomento.

A differenza della ricerca di un punto temporale, non devi eseguire alcuna configurazione speciale della sottoscrizione per cercare uno snapshot. Devi solo creare lo snapshot in anticipo. Ad esempio, potresti creare uno snapshot quando esegui il deployment di un nuovo codice del sottoscrittore, nel caso in cui sia necessario recuperare da conferme impreviste o errate.

Se il backlog nella sottoscrizione è troppo vecchio e lo snapshot risultante scade in meno di 1 ora, l'operazione di ricerca non va a buon fine.

Puoi cercare uno snapshot utilizzando la console, le API di Google o Google Cloud CLI.

Console

Per cercare uno snapshot:

  1. Nella Google Cloud console, vai alla pagina Sottoscrizione.

    Vai alla sottoscrizione

  2. Fai clic su una sottoscrizione.

  3. Nella pagina dei dettagli della sottoscrizione, fai clic su Riproduci messaggi.

  4. In Cerca, fai clic su Fino a uno snapshot.

  5. Seleziona uno snapshot appropriato, quindi fai clic su Cerca.

gcloud

Per cercare uno snapshot, utilizza il seguente gcloud pubsub subscriptions seek comando:

gcloud pubsub subscriptions seek SUBSCRIPTION_ID \
    --snapshot=SNAPSHOT_ID

Sostituisci quanto segue:

  • SNAPSHOT_ID: l'ID di uno snapshot. L'argomento dello snapshot deve essere lo stesso della sottoscrizione.
  • SUBSCRIPTION_ID: l'ID della sottoscrizione.

Eseguire la ricerca con i filtri

Puoi riprodurre i messaggi dalle sottoscrizioni con i filtri. Se cerchi un timestamp utilizzando una sottoscrizione con un filtro, il servizio Pub/Sub recapita nuovamente solo i messaggi che corrispondono al filtro.

Uno snapshot di una sottoscrizione con un filtro contiene i seguenti messaggi:

  • Tutti i messaggi più recenti dello snapshot, inclusi quelli che non corrispondono al filtro.
  • Messaggi non confermati più vecchi dello snapshot.

Se cerchi uno snapshot utilizzando una sottoscrizione con un filtro, il servizio Pub/Sub recapita nuovamente solo i messaggi nello snapshot che corrispondono al filtro della sottoscrizione che effettua la richiesta di ricerca.

Per saperne di più sui filtri, consulta Filtrare i messaggi.

Eseguire la ricerca con gli argomenti messaggi non recapitabili

Se cerchi messaggi in una sottoscrizione con un argomento messaggi non recapitabili, Pub/Sub imposta i tentativi di recapito su 0. I messaggi che ricevi da queste sottoscrizioni hanno un campo che conteggia il numero di tentativi di recapito.

Per saperne di più sugli argomenti messaggi non recapitabili, consulta Inoltro ad argomenti messaggi non recapitabili.

Eseguire la ricerca con le policy di ripetizione

Se cerchi messaggi in una sottoscrizione con una policy di ripetizione, Pub/Sub reimposta il ritardo tra:

  1. La scadenza del termine di conferma o l'invio di una conferma negativa da parte del sottoscrittore.
  2. Il nuovo invio del messaggio da parte di Pub/Sub.

Per saperne di più sulle policy di ripetizione, consulta Utilizzare le policy di ripetizione.

Eseguire la ricerca con la consegna "exactly-once"

Se cerchi messaggi in una sottoscrizione con la consegna "exactly-once", Pub/Sub invia nuovamente i messaggi confermati in precedenza idonei per la consegna. Tutte le conferme per una consegna effettuata prima dell'operazione di ricerca non andranno a buon fine. Le operazioni di ricerca sono a coerenza finale.

Per saperne di più sulle policy di ripetizione, consulta Consegna "exactly-once".