Dopo che hai confermato i messaggi in Pub/Sub, questi messaggi 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 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 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 un abbonamento. Uno snapshot registra lo stato di conferma di tutti i messaggi 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'abbonamento di origine. La durata è pari a 7 giorni meno l'età del messaggio non confermato meno recente nell'abbonamento. Ad esempio, prendiamo in considerazione uno snapshot di una sottoscrizione con un backlog in cui il messaggio non confermato più antico risale a 1 giorno fa. Lo snapshot scade dopo 6 giorni. Questa tempistica è necessaria per gli istantanei per offrire una solida garanzia di consegna almeno una volta.
La durata massima possibile di uno snapshot è di sette giorni. Non puoi creare uno snapshot che scade meno di un'ora dopo il suo momento di 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ò elaborare 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 strettamente coerenti in merito alla garanzia di recapito dei messaggi. 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 diventano immediatamente coerenti con l'operazione di ricerca. Pertanto, un messaggio pubblicato prima del timestamp di ricerca o confermato in uno snapshot potrebbe essere inviato dopo l'operazione di ricerca. In un certo senso, l'invio dei messaggi funziona come un sistema con coerenza finale rispetto all'operazione di ricerca. Potrebbe essere necessario un minuto prima che l'operazione venga applicata completamente.
Casi d'uso per le operazioni di ricerca
- Aggiornare il codice dell'abbonato in sicurezza. Un problema con il deployment del nuovo codice dell'abbonato è che il nuovo file eseguibile potrebbe confermare erroneamente i messaggi, con conseguente 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 relativi agli abbonati. 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 periodo precedente per risolvere l'errore.
- Risparmia tempo e costi di elaborazione. Esegui una conferma collettiva su un backlog di messaggi di grandi dimensioni che non sono più pertinenti.
- Testa il codice dell'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 rigorosa. Inoltre, gli snapshot possono essere applicati a qualsiasi sottoscrizione di un determinato argomento, inclusa una appena creata.
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 questa situazione, al progetto dell'argomento e al progetto della sottoscrizione vengono addebitati i costi di archiviazione dei messaggi in base alle rispettive impostazioni di conservazione dei messaggi.
Se la conservazione dei messaggi di un argomento non è configurata, un messaggio non confermato viene eliminato dalla sottoscrizione quando la sua età supera la proprietà message_retention_duration
della sottoscrizione. 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.
Configurare la conservazione dei messaggi dell'argomento
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 conservazione dei messaggi offre maggiore flessibilità, consentendo a qualsiasi sottoscrizione associata all'argomento di cercare a ritroso e ripetere i messaggi già confermati fino al message_retention_duration
dell'argomento.
Inoltre, la conservazione dei messaggi di un argomento permette 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 con le 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 7 giorni, utilizza il seguente comando gcloud pubsub topics create
:
gcloud pubsub topics create TOPIC_ID --message-retention-duration=7d
Puoi aggiornare questa impostazione utilizzando gcloud pubsub topics update
.
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
Configurare la conservazione dei messaggi della sottoscrizione
Pub/Sub inizia a conservare i messaggi per conto di una sottoscrizione al momento della sua creazione. Per impostazione predefinita, Pub/Sub elimina un messaggio da una sottoscrizione non appena viene confermato.
I messaggi non confermati vengono conservati per un periodo predefinito di 7 giorni (configurabile tramite la proprietà message_retention_duration
della sottoscrizione).
La configurazione di una sottoscrizione per conservare i messaggi confermati (utilizzando la proprietà
retain_acked_messages
) consente di riprodurre i messaggi confermati in precedenza
conservati dalla sottoscrizione. Puoi configurare i messaggi in modo che vengano conservati per un massimo di 31 giorni in una sottoscrizione. Questa configurazione si applica sia ai messaggi confermati che 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 fatturati al progetto dell'abbonamento.
Console
Per creare una sottoscrizione con la conservazione dei messaggi confermati abilitata, 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 della conservazione dei messaggi per selezionare il numero di giorni, ore e minuti per conservare i messaggi.
Attiva Conserva 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 confermati selezionando o deselezionando il campo Conserva i messaggi confermati.
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 Google o Google Cloud CLI.
Console
Per creare uno snapshot:
Nella console Google Cloud, vai alla pagina Snapshot.
Fai clic su Crea snapshot.
In Seleziona una sottoscrizione Pub/Sub, seleziona una sottoscrizione.
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, una sottoscrizione, 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 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 dell'abbonamento.SNAPSHOT_ID
. Specifica l'ID dello snapshot.
Esegui la ricerca fino a un timestamp
La ricerca fino a un timestamp contrassegnava come confermati tutti i messaggi ricevuti da Pub/Sub prima di quell'ora e come non confermati tutti i messaggi ricevuti successivamente.
Puoi eseguire i seguenti tipi di operazioni di ricerca in base ai timestamp:
Per eliminare tutti i messaggi, puoi andare a 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 sfasamento dell'orologio tra i server Pub/Sub.
Il fatto che Pub/Sub debba funzionare con l'ora di arrivo della richiesta di pubblicazione anziché con il momento in cui si è verificato un evento nel sistema di origine.
Puoi eseguire la ricerca fino a un timestamp utilizzando la console, le API Google o Google Cloud CLI. Prima di eseguire la ricerca fino a un 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 un abbonamento per cui è attiva la conservazione dei messaggi.
Nella pagina dei dettagli della sottoscrizione, fai clic su Riproduci messaggi.
Per Avanti veloce, 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 il
seguente
comando gcloud pubsub subscriptions seek
:
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 dell'abbonamento.
Per ulteriori informazioni sui formati di data e ora supportati, consulta l'argomento gcloud datetimes.
Eseguire la ricerca fino a uno snapshot
Puoi riprodurre i messaggi non confermati utilizzando uno snapshot per eseguire la ricerca fino a una qualsiasi delle sottoscrizioni dell'argomento.
A differenza della ricerca di un momento specifico, non è necessaria 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 del nuovo codice degli abbonati, nel caso in cui tu debba recuperare da acknowledgement inaspettati o errati.
Se la coda nell'abbonamento è troppo vecchia e lo snapshot risultante scade tra meno di un'ora, l'operazione di ricerca non va a buon fine.
Puoi eseguire ricerche fino a uno snapshot utilizzando la console, le API Google o Google Cloud CLI.
Console
Per eseguire la ricerca di uno snapshot:
Nella console Google Cloud, vai alla pagina Abbonamento.
Fai clic su un abbonamento.
Nella pagina dei dettagli della sottoscrizione, fai clic su Riproduci messaggi.
In Scorri, fai clic su A uno snapshot.
Seleziona uno snapshot appropriato e fai clic su Cerca.
gcloud
Per eseguire la ricerca di uno snapshot, utilizza il
seguente
comando 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 esegui una ricerca fino a un timstamp utilizzando un abbonamento con un filtro, il servizio Pub/Sub riconferisce 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 precedenti allo 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 messaggi in una sottoscrizione 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 consegna.
Per ulteriori informazioni sugli argomenti messaggi non recapitabili, consulta Inoltro ad argomenti messaggi non recapitabili.
Ricerca con criteri di ripetizione
Se cerchi messaggi in una sottoscrizione con un criterio di ripetizione, Pub/Sub reimposta il ritardo tra quanto segue:
- La scadenza della conferma o l'invio da parte dell'abbonato di una conferma negativa.
- Pub/Sub invia nuovamente il messaggio.
Per ulteriori informazioni sui criteri di ripetizione, consulta Utilizzare i criteri di ripetizione.
Effettuare ricerche con la 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 a coerenza finale.
Per ulteriori informazioni sui criteri di ripetizione, consulta Consegna esattamente una volta.