Riproduci di nuovo ed elimina definitivamente i messaggi con la ricerca

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:

  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 della conservazione dei messaggi per selezionare il numero di giorni, ore e minuti per 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. Modifica il tempo di conservazione o attiva o disattiva la conservazione dei messaggi selezionando o deselezionando l'opzione Attiva conservazione 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 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:

  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 con le impostazioni predefinite.

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

Per aggiornare le impostazioni di conservazione dei messaggi di una sottoscrizione:

  1. Seleziona il tuo abbonamento dalla pagina Abbonamenti Pub/Sub.

    Vai alla pagina Abbonamenti

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

  3. 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.

  4. 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:

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

    Vai alla pagina Snapshot

  2. Fai clic su Crea snapshot.

  3. Per Seleziona una sottoscrizione Pub/Sub, scegli una sottoscrizione.

  4. 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.

  5. 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:

  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 messaggi.

  4. Per Scorri, fai clic su Fino a un punto temporale precedente.

  5. 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:

  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 messaggi.

  4. In Scorri, fai clic su A uno snapshot.

  5. 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:

  1. La scadenza della conferma in scadenza o l'abbonato che invia un messaggio riconoscimento.
  2. 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".