Riprodurre di nuovo ed eliminare definitivamente i messaggi con la funzione Cerca

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

La funzionalità seek estende le capacità del sottoscrittore consentendo di modificare lo stato di conferma dei messaggi in blocco. Ad esempio, puoi riprodurre i messaggi confermati in precedenza o eliminare definitivamente i messaggi in blocco. Inoltre, puoi copiare lo stato di conferma di una sottoscrizione a un altro utilizzando la ricerca in combinazione con un'istantanea.

Per una rapida dimostrazione di come funzionano queste funzionalità, vedi Riprodurre di nuovo un messaggio in Pub/Sub cercando 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 in una sottoscrizione al momento della 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 dell'abbonamento di origine. La durata corrisponde a 7 giorni meno l'età del messaggio non confermato meno recente nella sottoscrizione. Ad esempio, considera uno snapshot di una sottoscrizione con un backlog in cui il messaggio non confermato meno recente risale a un giorno fa. Lo snapshot scade dopo 6 giorni. Questa tempistica è necessaria per gli snapshot per offrire una forte garanzia di distribuzione "atleast-once".

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

La funzionalità di ricerca consente di eseguire la ricerca di uno snapshot o un timestamp specifico per un abbonamento. Questa funzionalità ti consente di controllare in che modo Pub/Sub può recapitare i messaggi da un momento specifico o da uno snapshot specifico.

Per eseguire una ricerca nel passato e riprodurre i messaggi confermati in precedenza, devi prima configurare la conservazione dei messaggi nell'argomento o configurare la sottoscrizione in modo da conservare i messaggi confermati.

Coerenza finale delle operazioni di ricerca

Le operazioni di ricerca sono rigorosamente coerenti per quanto riguarda la garanzia di consegna dei messaggi. Ciò significa che qualsiasi messaggio che non viene confermato in base alla condizione di ricerca verrà garantito alla fine dopo il completamento dell'operazione. Tuttavia, i messaggi recapitati non diventano immediatamente coerenti con l'operazione di ricerca. Pertanto, un messaggio pubblicato prima del timestamp di ricerca o che viene riconosciuto in uno snapshot potrebbe essere recapitato dopo l'operazione di ricerca. In un certo senso, la consegna dei messaggi opera come un sistema infine coerente per quanto riguarda l'operazione di ricerca; potrebbe essere necessario fino a un minuto prima che l'operazione abbia effetto.

Casi d'uso per le operazioni di ricerca

  • Aggiorna il codice abbonato in sicurezza. Un problema relativo al deployment del nuovo codice sottoscrittore è che il nuovo eseguibile potrebbe confermare erroneamente i messaggi, causando la perdita di messaggi. L'integrazione degli snapshot nel processo di deployment offre un modo per ripristinare i bug nel codice del nuovo sottoscrittore.
  • Risolvi i problemi imprevisti degli abbonati. Nei casi in cui i problemi degli abbonati non sono associati a un evento di deployment specifico, potresti non avere uno snapshot pertinente. In questo caso, se hai abilitato la conservazione dei messaggi confermati per un abbonamento, la ricerca di una data passata ti consentirà di recuperare l'errore.
  • Risparmia tempo e costi di elaborazione. Eseguire una conferma collettiva su un backlog di grandi dimensioni di messaggi non più pertinenti.
  • Testa il codice dell'abbonato sulla base di dati noti. Quando si testa il codice dell'abbonato per verificarne le prestazioni e la coerenza, è utile utilizzare gli stessi dati a ogni esecuzione. Gli snapshot consentono di ottenere dati coerenti con una semantica forte. Inoltre, gli snapshot possono essere applicati a qualsiasi sottoscrizione su un determinato argomento, incluso uno appena creato.

Configura la conservazione dei messaggi

Puoi configurare la conservazione dei messaggi in un argomento e configurare una qualsiasi delle relative sottoscrizioni in modo da conservare i messaggi confermati. Ti consigliamo di configurare la conservazione dei messaggi degli argomenti se vuoi che vengano conservati per la riproduzione per un periodo più lungo rispetto alla conservazione dei messaggi configurata nella sottoscrizione. In questa situazione, l'archiviazione dei messaggi viene addebitata al progetto dell'argomento e al progetto della sottoscrizione in base alle rispettive impostazioni di conservazione dei messaggi.

Se la conservazione dei messaggi dell'argomento non è configurata, un messaggio non confermato viene eliminato dalla sottoscrizione quando la sua età supera la proprietà message_retention_duration dell'abbonamento. Se invece è configurata la conservazione dei messaggi dell'argomento, il messaggio non confermato viene eliminato dalla sottoscrizione solo quando la sua età supera il limite massimo dei message_retention_duration dell'argomento e della sottoscrizione.

Configura la conservazione dei messaggi dell'argomento

Per impostazione predefinita, un argomento Pub/Sub ignora i messaggi non appena vengono accettati da tutte le sottoscrizioni collegate all'argomento. La configurazione di un argomento con conservazione dei messaggi offre maggiore flessibilità, in quanto consente a qualsiasi sottoscrizione associata all'argomento di eseguire la ricerca indietro nel tempo e di riprodurre di nuovo i messaggi confermati in precedenza fino all'elemento message_retention_duration dell'argomento. La conservazione dei messaggi degli argomenti consente anche a una sottoscrizione di riprodurre di nuovo i messaggi pubblicati prima della creazione di una sottoscrizione.

Un argomento può conservare i messaggi pubblicati per un massimo di 31 giorni (configurabili dalla proprietà message_retention_duration dell'argomento) anche dopo che sono stati confermati da tutte le sottoscrizioni allegate. Nei casi in cui il valore message_retention_duration dell'argomento sia maggiore del valore message_retention_duration della sottoscrizione, Pub/Sub ignora un messaggio solo quando la sua età supera il valore message_retention_duration dell'argomento.

Se la conservazione dei messaggi dell'argomento è abilitata, i costi di archiviazione per i messaggi conservati in base all'argomento vengono addebitati al progetto dell'argomento.

Console

Per creare un argomento con la conservazione dei messaggi abilitata:

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

    Vai alla pagina degli argomenti

  2. Fai clic su Crea argomento.

  3. Nel campo ID argomento, inserisci un ID per l'argomento.

  4. Attiva Imposta la durata di conservazione dei messaggi.

    Lascia le altre opzioni nelle impostazioni predefinite.

  5. Utilizza il menu a discesa Durata di conservazione dei messaggi per selezionare il numero di giorni, ore e minuti in cui conservare i messaggi.

  6. Fai clic su Crea argomento per salvare l'argomento.

Per aggiornare le impostazioni di conservazione dei messaggi di un argomento:

  1. Seleziona l'argomento dalla pagina Argomenti Pub/Sub.

    Vai alla pagina degli argomenti

  2. Fai clic su Modifica nella parte superiore della pagina dei dettagli dell'argomento.

  3. Regola il periodo di conservazione o abilita o disabilita la conservazione dei messaggi selezionando o deselezionando l'opzione Attiva la conservazione dei messaggi.

  4. Fai clic su Aggiorna per salvare le modifiche apportate all'argomento.

gcloud

Per creare un argomento con una durata di conservazione dei messaggi di 7 giorni, utilizza il seguente comando di gcloud pubsub topics create:

gcloud pubsub topics create TOPIC_ID --message-retention-duration=7d

Puoi aggiornare questa impostazione utilizzando gcloud pubsub topics update . Questo ti consente anche di abilitare la conservazione dei messaggi per un argomento esistente:

gcloud pubsub topics update TOPIC_ID --message-retention-duration=1d

Puoi anche disabilitare la conservazione dei messaggi per un argomento con il comando update:

gcloud pubsub topics update TOPIC_ID --clear-message-retention-duration

Configura la conservazione dei messaggi di abbonamento

Pub/Sub inizia a conservare i messaggi per conto di una sottoscrizione quando questa viene creata. Per impostazione predefinita, Pub/Sub ignora un messaggio da una sottoscrizione non appena viene confermato. I messaggi non confermati vengono conservati per un valore predefinito di 7 giorni (configurabili dalla proprietà message_retention_duration dell'abbonamento).

La configurazione di una sottoscrizione in modo da conservare i messaggi confermati (utilizzando la proprietà retain_acked_messages) consente di riprodurre di nuovo i messaggi archiviati in precedenza conservati dalla sottoscrizione. Puoi configurare i messaggi in modo che vengano conservati per un massimo di 7 giorni in una sottoscrizione. Questa configurazione si applica ai messaggi confermati e non confermati. Tuttavia, i messaggi possono essere conservati in una sottoscrizione per più di 7 giorni se la durata di conservazione dei messaggi configurata per il relativo argomento è superiore a 7 giorni.

Se una sottoscrizione è configurata in modo da conservare i messaggi confermati, i costi di archiviazione per i messaggi confermati conservati dalla sottoscrizione vengono fatturati al progetto della sottoscrizione.

Console

Per creare una sottoscrizione con la conservazione dei messaggi con ACK abilitata, segui questi passaggi:

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

    Vai alla pagina degli abbonamenti

  2. Fai clic su Crea sottoscrizione.

  3. Nel campo ID abbonamento, inserisci un ID per l'abbonamento.

  4. Utilizza il menu a discesa Durata di conservazione dei messaggi per selezionare il numero di giorni, ore e minuti in cui conservare i messaggi.

  5. Attiva Conserva i messaggi confermati. Lascia le altre opzioni nelle impostazioni predefinite.

  6. Fai clic su Crea abbonamento per salvare l'abbonamento.

Per aggiornare le impostazioni di conservazione dei messaggi di un abbonamento:

  1. Seleziona la tua sottoscrizione dalla pagina Abbonamenti Pub/Sub.

    Vai alla pagina degli abbonamenti

  2. Fai clic su Modifica nella parte superiore della pagina dei dettagli dell'abbonamento.

  3. Regola la durata di conservazione dei messaggi o attiva o disattiva la conservazione dei messaggi con ACK selezionando o deselezionando il campo Conserva i messaggi confermati.

  4. Fai clic su Aggiorna per salvare le modifiche apportate all'abbonamento.

gcloud

Per creare una sottoscrizione con la conservazione dei messaggi con ACK abilitata, utilizza il seguente comando gcloud pubsub subscriptions create:

gcloud pubsub subscriptions create SUBSCRIPTION_ID
    --retain-acked-messages=true
    --message-retention-duration=5d

Puoi aggiornare questa impostazione utilizzando gcloud pubsub subscriptions update. Ciò consente anche di abilitare la conservazione dei messaggi con ACK per una sottoscrizione esistente:

gcloud pubsub subscriptions update SUBSCRIPTION_ID --message-retention-duration=1d

Puoi anche disabilitare la conservazione dei messaggi con ACK per una sottoscrizione con il comando update:

gcloud pubsub subscriptions update SUBSCRIPTION_ID --no-retain-acked-messages

Crea uno snapshot

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

Console

Per creare uno snapshot:

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

    Vai alla pagina Istantanee

  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 ulteriori informazioni su come assegnare un nome alle risorse Pub/Sub, consulta le linee guida per assegnare un nome a un argomento, a una sottoscrizione, a uno schema o a uno snapshot.

  5. Fai clic su Crea per creare lo snapshot.

Puoi anche creare uno snapshot dalla pagina Abbonamenti.

gcloud

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

gcloud pubsub snapshot create \
    --project=PROJECT_ID \
    --subscription=SUBSCRIPTION_ID \
    --name=SNAPSHOT_ID

Sostituisci quanto segue:

  • PROJECT_ID. Specifica l'ID del progetto.

  • SUBSCRIPTION_ID. Specifica l'ID dell'abbonamento.

  • SNAPSHOT_ID. Specifica l'ID dell'istantanea.

Esegui la ricerca fino a un timestamp

La ricerca di un punto temporale contrassegna tutti i messaggi ricevuti da Pub/Sub prima dell'ora come confermati e tutti i messaggi ricevuti dopo l'ora come non confermati.

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

  • Per eliminare definitivamente tutti i messaggi, puoi cercare una data e un'ora futuri.

  • Per riprodurre e rielaborare i messaggi confermati in precedenza, esegui la ricerca fino a una data passata.

La data e l'ora di pubblicazione del messaggio viene generata dai server Pub/Sub (vedi publishTime nel riferimento API). Questo approccio non è preciso per i seguenti motivi:

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

  • Il fatto che Pub/Sub deve funzionare con l'ora di arrivo della richiesta di pubblicazione anziché quando 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 un abbonamento, assicurati che la conservazione dei messaggi sia abilitata nell'abbonamento.

Console

Per cercare un timestamp, segui questi passaggi:

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

    Vai ad Abbonamento

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

  3. Nella pagina dei dettagli dell'abbonamento, fai clic su Riproduci i messaggi.

  4. In corrispondenza di Ricerca, fai clic su A un punto temporale precedente.

  5. Seleziona la data e l'ora appropriate, quindi fai clic su Cerca.

gcloud

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

gcloud pubsub subscriptions seek \
    --time=TIME \

Sostituisci TIME" con l'ora in cui vuoi eseguire l'operazione di ricerca. Per ulteriori informazioni sui formati orari supportati, consulta gcloud topic datetimes.

Vai a un'istantanea

Puoi riprodurre i messaggi non confermati utilizzando uno snapshot per eseguire la ricerca in una qualsiasi sottoscrizione dell'argomento.

A differenza della ricerca di un orario, non è necessario eseguire alcuna configurazione speciale dell'abbonamento per eseguire la ricerca di uno snapshot. devi solo creare l'istantanea in anticipo. Ad esempio, potresti creare uno snapshot durante il deployment del nuovo codice dell'abbonato, nel caso in cui sia necessario eseguire il ripristino da riconoscimenti imprevisti o errati.

Se il backlog nella sottoscrizione è troppo vecchio e lo snapshot risultante scadrà entro meno di un'ora, l'operazione di ricerca non va a buon fine.

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

Console

Per cercare uno snapshot, segui questi passaggi:

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

    Vai ad Abbonamento

  2. Fai clic su un abbonamento.

  3. Nella pagina dei dettagli dell'abbonamento, fai clic su Riproduci i messaggi.

  4. In Ricerca, fai clic su A un'istantanea.

  5. Seleziona lo snapshot appropriato e fai clic su Cerca.

gcloud

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

gcloud pubsub subscriptions SUBSCRIPTION_ID seek \
    --snapshot=SNAPSHOT \

Sostituisci quanto segue:

  • SNAPSHOT": l'ID di uno snapshot. L'argomento dello snapshot deve essere uguale a quello della sottoscrizione.
  • SUBSCRIPTION_ID: l'ID dell'abbonamento.

Cerca con filtri

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

Lo 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 esegui la ricerca di uno snapshot utilizzando una sottoscrizione con un filtro, il servizio Pub/Sub consegna nuovamente solo i messaggi nello snapshot che corrispondono al filtro della sottoscrizione che effettua la richiesta di ricerca.

Per ulteriori informazioni sui filtri, consulta Filtro dei messaggi.

Cerca con argomenti messaggi non recapitabili

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

Per ulteriori informazioni sugli argomenti messaggi non recapitabili, consulta Inoltro ad argomenti messaggi non recapitabili.

Cerca con criteri per i nuovi tentativi

Se cerchi messaggi in una sottoscrizione con un criterio per i tentativi, Pub/Sub reimposta il ritardo tra i seguenti:

  1. La scadenza per la conferma sta per scadere o l'abbonato invia una conferma negativa.
  2. Invia di nuovo il messaggio in Pub/Sub.

Per maggiori informazioni sui criteri relativi ai nuovi tentativi, consulta la pagina relativa all'utilizzo dei criteri relativi ai nuovi tentativi.

Cerca con consegna "exactly-once"

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

Per maggiori informazioni sui criteri relativi ai nuovi tentativi, consulta Consegna esatta una volta.