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 dei messaggi di un abbonamento. Uno snapshot registra lo stato di conferma di tutti i messaggi all'interno di un abbonamento al momento della sua creazione. Uno snapshot conserva i messaggi non confermati dell'abbonamento 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 è pari a 7 giorni meno l'età del messaggio non confermato meno recente nell'abbonamento. Prendiamo ad esempio uno snapshot di un abbonamento 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 in meno di 1 ora dal momento della sua creazione.
La funzionalità di ricerca ti consente di cercare 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 punto temporale specifico o da uno snapshot specifico.
Per cercare un punto temporale nel passato e riprodurre i messaggi confermati in precedenza, devi prima configurare la conservazione dei messaggi nell'argomento o configurare l'abbonamento in modo da conservare i messaggi confermati.
Coerenza finale delle operazioni di ricerca
Le operazioni di ricerca sono strettamente 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
- Aggiorna il codice del sottoscrittore in modo sicuro. Un problema relativo al deployment di nuovo codice del sottoscrittore è che il nuovo eseguibile potrebbe confermare erroneamente i messaggi, causando la perdita di messaggi. L'incorporamento di snapshot nel processo di deployment ti consente di recuperare i bug nel nuovo codice del sottoscrittore.
- Recupera 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 abilitato la conservazione dei messaggi confermati per un abbonamento, la ricerca di un punto temporale nel passato ti consente di recuperare l'errore.
- Risparmia tempo e costi di elaborazione. Esegui una conferma in blocco su un backlog di messaggi di grandi dimensioni che non sono più pertinenti.
- Testa il codice del sottoscrittore su dati noti. Quando testi 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 abbonamento su un determinato argomento, incluso uno appena creato.
Configura la conservazione dei messaggi
Puoi configurare la conservazione dei messaggi in un argomento e configurare eventuali abbonamenti in modo da conservare i messaggi confermati. Potresti voler configurare la conservazione dei messaggi dell'argomento se vuoi che i messaggi vengano conservati per la riproduzione per una durata superiore alla conservazione dei messaggi configurata nell'abbonamento. In questa situazione, al progetto dell'argomento e al progetto dell'abbonamento vengono addebitati i costi di archiviazione dei messaggi in base alle rispettive impostazioni di conservazione dei messaggi.
Se la conservazione dei messaggi dell'argomento non è configurata, un messaggio non confermato viene eliminato dall'abbonamento quando la sua età supera la proprietà message_retention_duration dell'abbonamento. D'altra parte, se la conservazione dei messaggi dell'argomento è configurata, il messaggio non confermato viene eliminato dall'abbonamento solo quando la sua età supera il valore massimo di message_retention_duration dell'argomento e dell'abbonamento.
Configura la conservazione dei messaggi dell'argomento
Per impostazione predefinita, un argomento Pub/Sub elimina i messaggi non appena vengono confermati da tutti gli abbonamenti collegati all'argomento.
La configurazione di un argomento con conservazione dei messaggi offre maggiore flessibilità, consentendo
a qualsiasi abbonamento associato all'argomento di cercare a ritroso e ripetere
i messaggi già confermati fino a
message_retention_duration dell'argomento.
Inoltre, la conservazione dei messaggi di un argomento permette a un abbonamento di ripetere i messaggi pubblicati prima della creazione di un abbonamento.
Un argomento può conservare i messaggi pubblicati per un massimo di 31 giorni (configurabile tramite la proprietà message_retention_duration dell'argomento) anche dopo che sono stati confermati da tutti gli abbonamenti collegati. Nei casi in cui message_retention_duration dell'argomento è maggiore di message_retention_duration dell'abbonamento, Pub/Sub elimina un messaggio solo quando la sua età supera message_retention_duration dell'argomento.
Se la conservazione dei messaggi di un argomento è abilitata, i costi di archiviazione per i messaggi conservati dall'argomento vanno fatturati al progetto dell'argomento.
Console
Per creare un argomento con la conservazione dei messaggi abilitata:
Nella Cloud de Confiance console, vai alla pagina Argomenti Pub/Sub.
Fai clic su Crea argomento.
Nel campo ID argomento, inserisci un ID per l'argomento.
Attiva Imposta la durata di conservazione dei messaggi.
Lascia le altre opzioni nelle impostazioni predefinite.
Utilizza il menu a discesa Durata di conservazione dei messaggi per selezionare il numero di giorni, ore e minuti per conservare i messaggi.
Fai clic su Crea argomento per salvare l'argomento.
Per aggiornare le impostazioni di conservazione dei messaggi di un argomento:
Seleziona l'argomento dalla pagina Argomenti Pub/Sub.
Fai clic su Modifica nella parte superiore della pagina dei dettagli dell'argomento.
Modifica il periodo di conservazione o attiva o disattiva la conservazione dei messaggi selezionando o deselezionando l'opzione Attiva conservazione messaggi.
Fai clic su Aggiorna per salvare le modifiche all'argomento.
gcloud
Per creare un argomento con una durata di conservazione dei messaggi di 7 giorni, utilizza il
seguente gcloud pubsub topics create
comando:
gcloud pubsub topics create TOPIC_ID --message-retention-duration=7d
Puoi aggiornare questa impostazione utilizzando gcloud pubsub topics update
. In questo modo puoi anche abilitare la conservazione dei messaggi per un argomento esistente:
gcloud pubsub topics update TOPIC_ID --message-retention-duration=1d
Puoi anche disattivare 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 dell'abbonamento
Pub/Sub inizia a conservare i messaggi per conto di un abbonamento quando viene creato l'abbonamento. Per impostazione predefinita, Pub/Sub elimina un messaggio da un abbonamento non appena viene confermato.
I messaggi non confermati vengono conservati per un periodo predefinito di 7 giorni (configurabile tramite
la proprietà message_retention_duration
dell'abbonamento).
La configurazione di un abbonamento per conservare i messaggi confermati (utilizzando la
retain_acked_messages
proprietà) ti consente di riprodurre i messaggi confermati in precedenza
conservati dall'abbonamento. Puoi configurare la conservazione dei messaggi per un massimo di 31 giorni in un abbonamento. Questa configurazione si applica sia ai messaggi confermati sia a quelli non confermati.
Se un abbonamento è configurato per conservare i messaggi confermati, i costi di archiviazione per i messaggi confermati conservati dall'abbonamento vengono addebitati al progetto dell'abbonamento.
Console
Per creare un abbonamento con la conservazione dei messaggi confermati abilitata:
Nella Cloud de Confiance console, vai alla pagina Abbonamenti Pub/Sub.
Fai clic su Crea abbonamento.
Nel campo ID abbonamento, inserisci un ID per l'abbonamento.
Utilizza il menu a discesa Durata di conservazione dei messaggi per selezionare il numero di giorni, ore e minuti per conservare i messaggi.
Attiva Conserva messaggi confermati. Lascia le altre opzioni nelle impostazioni predefinite.
Fai clic su Crea abbonamento per salvare l'abbonamento.
Per aggiornare le impostazioni di conservazione dei messaggi di un abbonamento:
Seleziona l'abbonamento dalla pagina Abbonamenti Pub/Sub.
Fai clic su Modifica nella parte superiore della pagina dei dettagli dell'abbonamento.
Modifica la durata di conservazione dei messaggi o attiva o disattiva la conservazione dei messaggi confermati selezionando o deselezionando il campo Conserva messaggi confermati.
Fai clic su Aggiorna per salvare le modifiche all'abbonamento.
gcloud
Per creare un abbonamento con la conservazione dei messaggi confermati abilitata, utilizza il
seguente
gcloud pubsub subscriptions create
comando:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --retain-acked-messages --message-retention-duration=5d
Puoi aggiornare questa impostazione utilizzando
gcloud pubsub subscriptions update
. In questo modo puoi anche abilitare la conservazione dei messaggi confermati per un abbonamento esistente:
gcloud pubsub subscriptions update SUBSCRIPTION_ID --message-retention-duration=1d
Puoi anche disattivare la conservazione dei messaggi confermati per un abbonamento 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:
Nella Cloud de Confiance console, vai alla pagina Snapshot.
Fai clic su Crea snapshot.
In Seleziona un abbonamento Pub/Sub, seleziona un abbonamento.
In ID snapshot, inserisci un nome per lo snapshot.
Per ulteriori informazioni su come denominare le risorse Pub/Sub, consulta Linee guida per la denominazione di un argomento, un abbonamento, uno schema o uno snapshot.
Fai clic su Crea per creare lo snapshot.
Puoi anche creare uno snapshot dalla pagina Abbonamenti. Se crei uno snapshot subito dopo aver creato un abbonamento, potresti ricevere un errore a causa del ritardo di propagazione per l'abbonamento appena creato.
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 dell'abbonamento.SNAPSHOT_ID. Specifica l'ID dello snapshot.
Esegui 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 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 dei messaggi 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 il momento 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 un abbonamento, assicurati che la conservazione dei messaggi sia abilitata nell'abbonamento.
Console
Per cercare un timestamp:
Nella Cloud de Confiance console, vai alla pagina Abbonamento.
Fai clic su un abbonamento per cui è abilitata la conservazione dei messaggi.
Nella pagina dei dettagli dell'abbonamento, fai clic su Riproduci messaggi.
In Cerca, fai clic su Fino a un punto temporale precedente.
Seleziona una data e un'ora appropriate e 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 in cui vuoi eseguire l' operazione di ricerca.
- SUBSCRIPTION_ID: l'ID dell'abbonamento.
Per ulteriori informazioni sui formati di ora supportati, consulta gcloud topic datetimes.
Esegui la ricerca fino a uno snapshot
Puoi riprodurre i messaggi non confermati utilizzando uno snapshot per cercare uno qualsiasi degli abbonamenti dell'argomento.
A differenza della ricerca di un punto temporale, non devi eseguire alcuna configurazione speciale dell'abbonamento per cercare uno snapshot. Devi solo creare lo snapshot in anticipo. Ad esempio, potresti creare uno snapshot durante il deployment di nuovo codice del sottoscrittore, nel caso in cui sia necessario recuperare da conferme impreviste o errate.
Se il backlog nell'abbonamento è 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:
Nella Cloud de Confiance console, vai alla pagina Abbonamento.
Fai clic su un abbonamento.
Nella pagina dei dettagli dell'abbonamento, fai clic su Riproduci messaggi.
In Cerca, fai clic su Fino a uno snapshot.
Seleziona uno snapshot appropriato e 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 dell'abbonamento.
- SUBSCRIPTION_ID: l'ID dell'abbonamento.
Esegui la ricerca con i filtri
Puoi riprodurre i messaggi dagli abbonamenti con i filtri. Se cerchi un timestamp utilizzando un abbonamento con un filtro, il servizio Pub/Sub recapita nuovamente solo i messaggi che corrispondono al filtro.
Uno snapshot di un abbonamento con un filtro contiene i seguenti messaggi:
- Tutti i messaggi più recenti dello snapshot, inclusi i messaggi che non corrispondono al filtro.
- Messaggi non confermati più vecchi dello snapshot.
Se cerchi uno snapshot utilizzando un abbonamento con un filtro, il servizio Pub/Sub recapita nuovamente solo i messaggi nello snapshot che corrispondono al filtro dell'abbonamento che effettua la richiesta di ricerca.
Per ulteriori informazioni sui filtri, consulta Filtrare i messaggi.
Esegui la ricerca con gli argomenti messaggi non recapitabili
Se cerchi messaggi in un abbonamento con un argomento messaggi non recapitabili, Pub/Sub imposta i tentativi di recapito su 0. I messaggi che ricevi da questi abbonamenti hanno un campo che conteggia il numero di tentativi di recapito.
Per ulteriori informazioni sugli argomenti messaggi non recapitabili, consulta Inoltro ad argomenti messaggi non recapitabili.
Esegui la ricerca con le policy di ripetizione
Se cerchi messaggi in un abbonamento con una policy di ripetizione, Pub/Sub reimposta il ritardo tra:
- La scadenza del termine di conferma o l'invio di una conferma negativa da parte del sottoscrittore.
- L'invio di nuovo del messaggio da parte di Pub/Sub.
Per ulteriori informazioni sulle policy di ripetizione, consulta Utilizzare le policy di ripetizione.
Esegui la ricerca con la consegna "exactly-once"
Se cerchi messaggi in un abbonamento 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 ulteriori informazioni sulle policy di ripetizione, consulta Consegna "exactly-once".