Dopo aver confermato i messaggi in Pub/Sub, questi messaggi diventano inaccessibili al client dell'abbonato. Inoltre, i client sottoscrittori devono elaborare ogni messaggio in una sottoscrizione anche se è necessario solo un sottoinsieme.
La funzionalità di ricerca espande le funzionalità degli iscritti consentendo di modificare collettivamente lo stato di conferma dei messaggi. Ad esempio, puoi riprodurre i messaggi confermati in precedenza o eliminare collettivamente i messaggi. Inoltre, puoi copiare lo stato di conferma di una sottoscrizione in un'altra utilizzando la ricerca in combinazione con uno snapshot.
Per una breve dimostrazione del funzionamento di queste funzionalità, consulta Riproduci di nuovo un messaggio in Pub/Sub eseguendo la ricerca fino a uno snapshot o un timestamp.
Panoramica snapshot e ricerca
Uno snapshot Pub/Sub è una soluzione durevole, coerente e affidabile visualizzazione point-in-time dello stato di conferma (ack) dei messaggi di una sottoscrizione. 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 della sottoscrizione di origine al momento della sua creazione, nonché tutti i messaggi pubblicati nell'argomento dopo la creazione dello snapshot.
La durata di uno snapshot è determinata dal backlog esistente dell'origine abbonamento. La durata è pari a 7 giorni meno l'età del messaggio non confermato meno recente nell'abbonamento. Ad esempio, considera un'istantanea una sottoscrizione con un backlog in cui il messaggio non confermato meno recente è pari a 1 giorno vecchi. Lo snapshot scade dopo 6 giorni. Questa sequenza temporale è necessaria per gli snapshot per offrire una solida garanzia di consegna "at-least-once".
La durata massima possibile di uno snapshot è di sette giorni. Non puoi creare uno snapshot che scadrà tra meno di un'ora dopo al momento della 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 momento specifico o da uno snapshot specifico.
Per eseguire la ricerca fino a un momento nel passato e riprodurre i messaggi già confermati, 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 rigorosamente coerenti per quanto riguarda la consegna dei messaggi garantito. Ciò significa che qualsiasi messaggio che deve diventare non confermato in base alla condizione di ricerca verrà eventualmente consegnato al termine dell'operazione di ricerca. Tuttavia, i messaggi recapitati non vengono immediatamente coerente con l'operazione di ricerca. Quindi, un messaggio pubblicato prima del timestamp di ricerca o che è stato confermato in uno snapshot eseguite dopo l'operazione di ricerca. In un certo senso, la consegna dei messaggi funziona come a coerenza finale rispetto all'operazione di ricerca; l'operazione potrebbe per un massimo di un minuto affinché l'operazione abbia effetto.
Casi d'uso per le operazioni di ricerca
- Aggiornare il codice dell'abbonato in sicurezza. Un problema relativo al deployment di un nuovo abbonato è che il nuovo eseguibile potrebbe erroneamente confermare i messaggi, causa la perdita dei messaggi. L'integrazione degli snapshot nel processo di implementazione ti offre un modo per recuperare dai bug nel nuovo codice degli abbonati.
- Risolvere i problemi imprevisti degli iscritti. Se i problemi degli abbonati non sono associati a un evento di implementazione specifico, potresti non avere uno snapshot pertinente. In questo caso, se hai attivato la conservazione dei messaggi confermati per un abbonamento, puoi eseguire una ricerca in un momento precedente per recuperare dall'errore.
- Risparmia tempo e costi di elaborazione. Esegui una conferma collettiva su un arretrato di messaggi non più pertinenti.
- Testa il codice abbonato su dati noti. Quando testi il codice degli abbonati per verificarne il rendimento e la coerenza, è utile utilizzare gli stessi dati in ogni esecuzione. Gli snapshot consentono di ottenere dati coerenti con una semantica elevata. Inoltre, gli snapshot possono essere applicati a qualsiasi sottoscrizione su un determinato argomento, incluso un 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. Ti consigliamo di configurare la conservazione dei messaggi per argomento se vuoi che i messaggi vengano conservati per la riproduzione per una durata superiore alla conservazione dei messaggi configurata nella sottoscrizione. In questo al progetto dell'argomento e al progetto della sottoscrizione vengono addebitati i costi l'archiviazione dei messaggi in base alle rispettive impostazioni di conservazione.
Se la conservazione dei messaggi di un argomento non è configurata, viene restituito un messaggio non confermato
eliminate dall'abbonamento quando la sua età supera la durata dell'abbonamento
message_retention_duration
proprietà. D'altra parte, se è configurata la conservazione dei messaggi dell'argomento, il messaggio non confermato viene eliminato dall'abbonamento solo quando la sua età supera il valore massimo dei message_retention_duration
dell'argomento e dell'abbonamento.
Configura la conservazione dei messaggi degli argomenti
Per impostazione predefinita, un argomento Pub/Sub elimina i messaggi non appena vengono confermati da tutte le sottoscrizioni associate all'argomento.
La configurazione di un argomento con la conservazione dei messaggi offre maggiore flessibilità, consentendo
qualsiasi sottoscrizione associata all'argomento da cercare a ritroso nel tempo e
messaggi confermati in precedenza fino al livello
message_retention_duration
La conservazione dei messaggi di un argomento consente inoltre a una sottoscrizione di ripetere i messaggi
pubblicati prima della creazione di una sottoscrizione.
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 tutte le sottoscrizioni collegate. Se il valore message_retention_duration
dell'argomento è maggiore del valore message_retention_duration
dell'abbonamento, Pub/Sub elimina un messaggio solo se la sua età supera il valore 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 console Google Cloud, 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 della 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 tempo 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 apportate all'argomento.
gcloud
Per creare un argomento con una durata di conservazione dei messaggi di sette giorni, utilizza la
persone che seguo gcloud pubsub topics create
:
gcloud pubsub topics create TOPIC_ID --message-retention-duration=7d
Puoi aggiornare questa impostazione utilizzando gcloud pubsub topics update
di Google. In questo modo puoi anche attivare 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 di abbonamento
Pub/Sub inizia a conservare i messaggi per conto di una sottoscrizione quando
viene creata la sottoscrizione. Per impostazione predefinita, Pub/Sub ignora
un messaggio da una sottoscrizione non appena il messaggio viene confermato.
I messaggi non confermati vengono conservati per un periodo predefinito di 7 giorni (configurabile
message_retention_duration
dell'abbonamento
.
Configurazione di una sottoscrizione per conservare i messaggi confermati (utilizzando
retain_acked_messages
) ti consente di riprodurre i messaggi precedentemente acquisiti
mantenuti dall'abbonamento. Puoi configurare i messaggi da conservare per un
per un massimo di 31 giorni. Questo
si applica ai messaggi confermati e non confermati.
Se una sottoscrizione è configurata per conservare i messaggi confermati, i costi di archiviazione per i messaggi confermati e conservati dalla sottoscrizione vengono addebitati i costi del progetto di sottoscrizione.
Console
Per creare una sottoscrizione in cui sia abilitata la conservazione dei messaggi con ACK, segui questi passaggi:
Nella console Google Cloud, vai alla pagina Abbonamenti Pub/Sub.
Fai clic su Crea sottoscrizione.
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 in cui conservare i messaggi.
Attiva Conserva i messaggi confermati. Lascia le altre opzioni con le impostazioni predefinite.
Fai clic su Crea abbonamento per salvare l'abbonamento.
Per aggiornare le impostazioni di conservazione dei messaggi di una sottoscrizione:
Seleziona il tuo 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 oppure attiva o disattiva la conservazione dei messaggi con ACK selezionando o deselezionando il campo Conserva confermati messaggi.
Fai clic su Aggiorna per salvare le modifiche all'abbonamento.
gcloud
Per creare una sottoscrizione 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 attivare la conservazione dei messaggi confermati per una
sottoscrizione esistente:
gcloud pubsub subscriptions update SUBSCRIPTION_ID --message-retention-duration=1d
Puoi anche disattivare la conservazione dei messaggi confermati 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:
Nella console Google Cloud, vai alla pagina Snapshot.
Fai clic su Crea snapshot.
Per Seleziona una sottoscrizione Pub/Sub, scegli una sottoscrizione.
In ID snapshot, inserisci un nome per lo snapshot.
Per ulteriori informazioni su come denominare le risorse Pub/Sub, consulta Linee guida per denominare un argomento, una sottoscrizione, uno schema o uno snapshot.
Fai clic su Crea per creare lo snapshot.
Puoi anche creare uno snapshot dalla pagina Abbonamenti. Se creare uno snapshot subito dopo aver creato una sottoscrizione, potresti ricevere un errore dovuto al ritardo della propagazione per la 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 dell'abbonamento.SNAPSHOT_ID
. Specifica l'ID dello snapshot.
Esegui la ricerca fino a un timestamp
La ricerca puntuale contrassegna ogni messaggio ricevuto da Pub/Sub prima l'ora come confermata e tutti i messaggi ricevuti dopo quella data non confermate.
Puoi eseguire i seguenti tipi di operazioni di ricerca in base ai timestamp:
Per eliminare tutti i messaggi, puoi cercare un momento futuro.
Per riprodurre e rielaborare i messaggi confermati in precedenza, esegui la ricerca fino a un momento nel passato.
La data e l'ora di pubblicazione del messaggio vengono generate dai server Pub/Sub (vedi publishTime
nel riferimento all'API). Questo approccio non è preciso per i seguenti motivi:
Possibile disallineamento dell'orologio tra i server Pub/Sub.
Il fatto che Pub/Sub debba funzionare con l'ora di arrivo la richiesta di pubblicazione anziché quando si è verificato un evento nel sistema di origine.
Puoi cercare un timestamp utilizzando la console, le API Google o Google Cloud CLI. Prima di eseguire la ricerca del timestamp in un abbonamento, Assicurati che la conservazione dei messaggi sia abilitata nell'abbonamento.
Console
Per eseguire la ricerca fino a un timestamp:
Nella console Google Cloud, vai alla pagina Abbonamento.
Fai clic su una sottoscrizione per cui è abilitata la conservazione dei messaggi.
Nella pagina dei dettagli dell'abbonamento, fai clic su Riproduci messaggi.
Per Scorri, fai clic su Fino a un punto temporale precedente.
Seleziona una data e un'ora appropriate, quindi fai clic su Cerca.
gcloud
Per eseguire la ricerca fino a un timestamp, utilizza
persone che seguo
gcloud pubsub subscriptions seek
:
gcloud pubsub subscriptions seek SUBSCRIPTION_ID \ --time=TIME \
Sostituisci quanto segue:
- TIME: l'ora in cui vuoi eseguire la di ricerca.
- SUBSCRIPTION_ID: l'ID dell'abbonamento.
Per ulteriori informazioni 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 eseguire ricerche delle sottoscrizioni all'argomento.
A differenza della ricerca di un orario, non devi eseguire nessuna configurazione della sottoscrizione per eseguire la ricerca fino a uno snapshot. Devi solo creare un'istantanea della situazione in anticipo. Ad esempio, potresti creare uno snapshot durante il deployment nuovo codice abbonato, nel caso in cui avessi bisogno di recuperare un account imprevisto o errato riconoscimenti.
Se il backlog della sottoscrizione è troppo vecchio e lo snapshot risultante scadrà tra meno di un'ora e l'operazione di ricerca non va a buon fine.
Puoi eseguire la ricerca fino a uno snapshot utilizzando la console, le API di Google o Google Cloud CLI.
Console
Per cercare uno snapshot:
Nella console Google Cloud, vai alla pagina Abbonamento.
Fai clic su un abbonamento.
Nella pagina dei dettagli dell'abbonamento, fai clic su Riproduci messaggi.
In Scorri, fai clic su A uno snapshot.
Seleziona un'istantanea appropriata e fai clic su Cerca.
gcloud
Per eseguire la ricerca fino a uno snapshot, utilizza
persone che seguo
gcloud pubsub subscriptions seek
:
gcloud pubsub subscriptions seek SUBSCRIPTION_ID \ --snapshot=SNAPSHOT_ID
Sostituisci quanto segue:
- SNAPSHOT_ID: l'ID di uno snapshot. L'argomento dell'istantanea deve essere lo stesso dell'abbonamento.
- SUBSCRIPTION_ID: l'ID dell'abbonamento.
Effettuare ricerche con i filtri
Puoi riprodurre i messaggi delle iscrizioni con i filtri. Se cerchi un il 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 dell'istantanea, inclusi quelli che non rientrano nel filtro.
- Messaggi non confermati più vecchi dello snapshot.
Se esegui la ricerca in uno snapshot utilizzando un abbonamento con un filtro, il servizio Pub/Sub riconsegna 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.
Effettuare ricerche con argomenti messaggi non recapitabili
Se cerchi i messaggi in una sottoscrizione con un argomento messaggi non recapitabili,
Pub/Sub imposta i tentativi di consegna su 0
. I messaggi che
da questi abbonamenti hanno un campo che indica il numero di
tentativi di consegna.
Per ulteriori informazioni sugli argomenti messaggi non recapitabili, consulta Inoltro ad argomenti messaggi non recapitabili.
Ricerca con criteri di ripetizione
Se cerchi i messaggi in una sottoscrizione con un criterio di ripetizione, Pub/Sub reimposta il ritardo tra i seguenti:
- La scadenza della conferma in scadenza o l'abbonato che invia un messaggio riconoscimento.
- Pub/Sub invia nuovamente il messaggio.
Per ulteriori informazioni sui criteri di ripetizione, consulta Utilizzare i criteri di ripetizione.
Ricerca con consegna "exactly-once"
Se cerchi messaggi in una sottoscrizione con consegna exactly-once, Pub/Sub invia nuovamente i messaggi confermati in precedenza che sono idonei per la consegna. Eventuali riconoscimenti per un caricamento effettuato prima dell'operazione di ricerca non andranno a buon fine. Le operazioni di ricerca sono in modo costante.
Per ulteriori informazioni sui criteri relativi ai nuovi tentativi, consulta Consegna "exactly-once".