Nachrichten mit der Suchfunktion wiedergeben und dauerhaft löschen

Nachdem du Nachrichten in Pub/Sub bestätigt hast, kann der Abonnentenclient nicht mehr auf diese Nachrichten zugreifen. Außerdem müssen Abonnentenclients alle Nachrichten in einem Abo verarbeiten, auch wenn nur einige davon benötigt werden.

Die Suchfunktion (seek) erweitert die Möglichkeiten von Abonnenten, da sie es Ihnen ermöglichen, den Bestätigungsstatus von Nachrichten im Bulk zu ändern. Sie können zum Beispiel zuvor quittierte Nachrichten im Block wiedergeben oder Nachrichten im Block dauerhaft löschen. Außerdem können Sie den Bestätigungsstatus eines Abos in ein anderes Abo kopieren, indem Sie die Suche in Kombination mit einem Snapshot verwenden.

Eine kurze Demonstration der Funktionsweise dieser Funktionen finden Sie unter Nachrichten in Pub/Sub durch Suchen nach einem Snapshot oder Zeitstempel wiedergeben.

Übersicht über Snapshot erstellen

Ein Pub/Sub-Snapshot ist eine dauerhafte, konsistente und zuverlässige Ansicht des Status der Nachrichtenbestätigung eines Abos zu einem bestimmten Zeitpunkt. Ein Snapshot zeichnet den Bestätigungsstatus aller Nachrichten in einem Abo zum Zeitpunkt der Erstellung auf. Ein Snapshot enthält die nicht bestätigten Nachrichten des Quellabos zum Zeitpunkt der Snapshot-Erstellung sowie alle Nachrichten, die nach dem Erstellen des Snapshots im Thema veröffentlicht werden.

Die Lebensdauer eines Snapshots wird durch den vorhandenen Rückstand des Quellabos bestimmt. Die Lebensdauer beträgt 7 Tage abzüglich des Alters der ältesten unbestätigten Nachricht im Abo. Nehmen wir als Beispiel einen Snapshot eines Abos mit einem Rückstand, bei dem die älteste unbestätigte Nachricht einen Tag alt ist. Der Snapshot läuft nach 6 Tagen ab. Dieser Zeitplan ist erforderlich, damit Snapshots eine starke mindestens einmalige Übermittlung bieten.

Die maximal mögliche Lebensdauer eines Snapshots beträgt sieben Tage. Sie können keinen Snapshot erstellen, der weniger als eine Stunde nach der Erstellung abläuft.

Mit der Suchfunktion können Sie nach einem bestimmten Snapshot oder Zeitstempel für ein Abo suchen. Mit dieser Funktion können Sie steuern, wie Pub/Sub Nachrichten ab einem bestimmten Zeitpunkt oder von einem bestimmten Snapshot senden kann.

Um bis zu einem Zeitpunkt in der Vergangenheit zu suchen und zuvor quittierte Nachrichten noch einmal wiederzugeben, müssen Sie zuerst die Nachrichtenaufbewahrung für das Thema konfigurieren oder das Abo so konfigurieren, dass quittierte Nachrichten aufbewahrt werden.

Eventual Consistency von Suchvorgängen

Die Suchfunktionen sind im Hinblick auf die Nachrichtenzustellungsgarantie strikt konsistent. Das bedeutet, dass jede Nachricht, die aufgrund der Suchbedingung nicht bestätigt werden soll, garantiert zugestellt wird, nachdem der Suchvorgang erfolgreich war. Zugestellte Nachrichten werden jedoch nicht sofort mit dem Suchvorgang konsistent. Nachrichten, die vor dem Seek-Zeitstempel veröffentlicht oder in einem Snapshot quittiert wurden, können trotzdem nach dem Suchvorgang zugestellt werden. In gewisser Weise funktioniert die Nachrichtenübermittlung in Bezug auf den Suchvorgang als Eventual Consistency-System. Es kann bis zu einer Minute dauern, bis der Vorgang vollständig wirksam ist.

Anwendungsfälle für Suchvorgänge

  • Abonnentencode sicher aktualisieren. Bei der Bereitstellung von neuem Abonnentencode kann es vorkommen, dass die neue ausführbare Datei fälschlicherweise Nachrichten quittiert. Dieses Problem führt zum Verlust von Nachrichten. Snapshots bieten die Möglichkeit, den ursprünglichen Zustand nach Fehlern im neuen Abonnentencode wiederherzustellen.
  • Nach unerwarteten Abonnentenproblemen wiederherstellen. Unter Umständen haben Sie für Abonnentenprobleme, die sich nicht auf ein bestimmtes Bereitstellungsereignis beziehen, keinen relevanten Snapshot zur Verfügung. In diesem Fall können Sie das Problem beheben, indem Sie mit der Suchfunktion zu einem bestimmten Zeitpunkt in der Vergangenheit zurückkehren. Dazu muss die Aufbewahrung quittierter Nachrichten für ein Abo aktiviert sein.
  • Verarbeitungszeit und Kosten sparen. Große Rückstände nicht mehr relevanter Nachrichten können im Block bestätigt werden.
  • Abonnentencode mit bekannten Daten testen. Im Rahmen von Leistungs- und Konsistenztests von Abonnentencode ist es sinnvoll, für jeden Testlauf dieselben Daten zu verwenden. Snapshots ermöglichen konsistente Daten mit starker Semantik. Darüber hinaus können Snapshots auf jedes Abo zu einem bestimmten Thema angewendet werden, auch auf ein neu erstelltes.

Nachrichtenspeicherung konfigurieren

Sie können die Nachrichtenaufbewahrung für ein Thema und alle zugehörigen Abos so konfigurieren, dass bestätigte Nachrichten aufbewahrt werden. Sie können die Nachrichtenaufbewahrung für Themen konfigurieren, wenn Sie möchten, dass Nachrichten länger als die für das Abo konfigurierte Nachrichtenaufbewahrung zur Wiederholung aufbewahrt werden. In diesem Fall wird der Nachrichtenspeicher für das Projekt des Themas und des Abos entsprechend den jeweiligen Einstellungen für die Nachrichtenaufbewahrung abgerechnet.

Ist die Aufbewahrung von Themennachrichten nicht konfiguriert, wird eine nicht quittierte Nachricht aus dem Abo gelöscht, wenn deren Alter das Attribut message_retention_duration des Abos überschreitet. Ist die Aufbewahrung von Themennachrichten konfiguriert, wird andererseits die nicht quittierte Nachricht nur dann aus dem Abo gelöscht, wenn deren Alter den Höchstwert des Themas und von message_retention_duration des Abos überschreitet.

Aufbewahrung von Themennachrichten konfigurieren

Standardmäßig verwirft ein Pub/Sub-Thema Nachrichten, sobald sie von allen mit dem Thema verknüpften Abos bestätigt wurden. Wenn Sie ein Thema mit Nachrichtenaufbewahrung konfigurieren, sind Sie flexibler, da jedes mit dem Thema verknüpfte Abo in der Zeit zurückspulen und zuvor bestätigte Nachrichten bis zum message_retention_duration des Themas wiedergeben kann. Mit der Aufbewahrung von Themennachrichten kann ein Abo auch Nachrichten wiedergeben, die vor der Erstellung eines Abos veröffentlicht wurden.

Veröffentlichte Nachrichten eines Themas können maximal 31 Tage lang aufbewahrt werden (konfigurierbar durch das Attribut message_retention_duration des Themas), selbst wenn sie von allen zugeordneten Abos quittiert wurden. In Fällen, in denen der message_retention_duration des Themas größer ist als der message_retention_duration des Abos, verwirft Pub/Sub eine Nachricht nur, wenn ihr Alter den message_retention_duration des Themas überschreitet.

Wenn die Aufbewahrung von Themennachrichten aktiviert ist, werden Speicherkosten für die vom Thema aufbewahrten Nachrichten dem Projekt des Themas in Rechnung gestellt.

Console

So erstellen Sie ein Thema mit aktivierter Nachrichtenaufbewahrung:

  1. Rufen Sie in der Google Cloud Console die Seite Pub/Sub-Themen auf.

    Zur Seite "Themen"

  2. Klicken Sie auf Thema erstellen.

  3. Geben Sie im Feld Themen-ID eine ID für das Thema ein.

  4. Aktivieren Sie die Option Dauer der Nachrichtenaufbewahrungsdauer festlegen.

    Übernehmen Sie für die restlichen Optionen die Standardeinstellungen.

  5. Wählen Sie im Drop-down-Menü Dauer der Nachrichtenaufbewahrung die Anzahl der Tage, Stunden und Minuten aus, für die Nachrichten aufbewahrt werden sollen.

  6. Klicken Sie auf Thema erstellen, um das Thema zu speichern.

So aktualisieren Sie die Einstellungen für die Nachrichtenaufbewahrung eines Themas:

  1. Wählen Sie Ihr Thema auf der Seite Pub/Sub-Themen aus.

    Zur Seite "Themen"

  2. Klicken Sie oben auf der Seite mit den Themendetails auf Bearbeiten.

  3. Passen Sie die Aufbewahrungsdauer an oder aktivieren bzw. deaktivieren Sie die Nachrichtenaufbewahrung, indem Sie die Option Nachrichtenaufbewahrung aktivieren aktivieren bzw. deaktivieren.

  4. Klicken Sie auf Aktualisieren, um die Änderungen am Thema zu speichern.

gcloud

Verwenden Sie den folgenden gcloud pubsub topics create-Befehl, um ein Thema mit einer Nachrichtenaufbewahrungsdauer von 7 Tagen zu erstellen:

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

Sie können diese Einstellung mit gcloud pubsub topics update aktualisieren. Außerdem können Sie damit die Nachrichtenaufbewahrung für ein vorhandenes Thema aktivieren:

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

Mit dem Befehl update können Sie die Nachrichtenaufbewahrung für ein Thema auch deaktivieren:

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

Aufbewahrung von Abonachrichten konfigurieren

Pub/Sub beginnt mit dem Aufbewahren von Nachrichten im Namen eines Abos, wenn das Abo erstellt wird. Standardmäßig verwirft Pub/Sub eine Nachricht aus einem Abo, sobald die Nachricht bestätigt wurde. Nicht bestätigte Nachrichten werden standardmäßig 7 Tage aufbewahrt (konfigurierbar über das Attribut message_retention_duration des Abos).

Wenn Sie ein Abo mit dem Attribut retain_acked_messages so konfigurieren, dass bestätigte Nachrichten aufbewahrt werden, können Sie zuvor bestätigte Nachrichten wiedergeben, die vom Abo beibehalten wurden. Sie können Nachrichten so konfigurieren, dass sie in einem Abo maximal sieben Tage lang aufbewahrt werden. Diese Konfiguration gilt sowohl für bestätigte als auch für nicht bestätigte Nachrichten. Nachrichten können in einem Abo jedoch länger als 7 Tage aufbewahrt werden, wenn die für das Thema konfigurierte Nachrichtenaufbewahrungsdauer länger als 7 Tage ist.

Wenn ein Abo so konfiguriert ist, dass bestätigte Nachrichten aufbewahrt werden, werden Speicherkosten für die vom Abo aufbewahrten bestätigten Nachrichten dem Projekt des Abos in Rechnung gestellt.

Console

So erstellen Sie ein Abo mit aktivierter Aufbewahrung quittierter Nachrichten:

  1. Rufen Sie in der Google Cloud Console die Seite Pub/Sub-Abos auf.

    Zur Seite „Abos“

  2. Klicken Sie auf Abo erstellen.

  3. Geben Sie im Feld Abo-ID eine ID für Ihr Abo ein.

  4. Wählen Sie im Drop-down-Menü Dauer der Nachrichtenaufbewahrung aus, wie viele Tage, Stunden oder Minuten Nachrichten aufbewahrt werden sollen.

  5. Aktivieren Sie Bestätigte Nachrichten aufbewahren. Übernehmen Sie für die restlichen Optionen die Standardeinstellungen.

  6. Klicken Sie auf Abo erstellen, um das Abo zu speichern.

So aktualisieren Sie die Einstellungen für die Nachrichtenaufbewahrung eines Abos:

  1. Wählen Sie auf der Seite Pub/Sub-Abos Ihr Abo aus.

    Zur Seite „Abos“

  2. Klicken Sie oben auf der Seite mit den Abodetails auf Bearbeiten.

  3. Passen Sie die Aufbewahrungsdauer für Nachrichten an oder aktivieren bzw. deaktivieren Sie die Aufbewahrung bestätigter Nachrichten, indem Sie das Feld Bestätigte Nachrichten aufbewahren anklicken bzw. das Häkchen daraus entfernen.

  4. Klicken Sie auf Aktualisieren, um die Änderungen am Abo zu speichern.

gcloud

Verwenden Sie den folgenden gcloud pubsub subscriptions create-Befehl, um ein Abo mit aktivierter Aufbewahrung quittierter Nachrichten zu erstellen:

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

Sie können diese Einstellung mit gcloud pubsub subscriptions update aktualisieren. So können Sie auch die Aufbewahrung bestätigter Nachrichten für ein vorhandenes Abo aktivieren:

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

Mit dem Befehl update können Sie die Aufbewahrung quittierter Nachrichten für ein Abo auch deaktivieren:

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

Snapshot erstellen

Sie können einen Snapshot mit der Console, den Google APIs oder der Google Cloud CLI erstellen.

Console

So erstellen Sie einen Snapshot:

  1. Rufen Sie in der Google Cloud Console die Seite Snapshots auf.

    Zur Seite „Snapshots“

  2. Klicken Sie auf Snapshot erstellen.

  3. Wählen Sie unter Select a Pub/Sub subscription (Pub/Sub-Abo auswählen) ein Abo aus.

  4. Geben Sie unter Snapshot-ID einen Namen für den Snapshot ein.

    Weitere Informationen zum Benennen von Pub/Sub-Ressourcen finden Sie unter Richtlinien zum Benennen von Themen, Abos, Schemas oder Snapshots.

  5. Klicken Sie auf Erstellen, um den Snapshot zu erstellen.

Sie können einen Snapshot auch über die Seite Abos erstellen.

gcloud

Verwenden Sie den folgenden gcloud pubsub snapshots create-Befehl, um einen Snapshot zu erstellen:

gcloud pubsub snapshots create \
    --project=PROJECT_ID \
    --subscription=SUBSCRIPTION_ID \
    SNAPSHOT_ID

Ersetzen Sie Folgendes:

  • PROJECT_ID. Gibt die ID des Projekts an.

  • SUBSCRIPTION_ID: Gibt die ID des Abos an.

  • SNAPSHOT_ID: Gibt die ID des Snapshots an.

Bis Zeitstempel suchen

Bei der Suche bis zu einem Zeitpunkt werden alle Nachrichten, die vor dem betreffenden Zeitpunkt bei Pub/Sub eingegangen sind, als quittiert markiert. Alle Nachrichten, die danach eingehen, werden als nicht quittiert markiert.

Sie können die folgenden Arten von Suchvorgängen basierend auf Zeitstempeln ausführen:

  • Um alle Nachrichten dauerhaft zu löschen, wählen Sie einen Zeitpunkt in der Zukunft.

  • Wenn Sie zuvor bestätigte Nachrichten wiedergeben und noch einmal verarbeiten möchten, suchen Sie einen Zeitpunkt in der Vergangenheit.

Die Veröffentlichungszeit der Nachricht wird von den Pub/Sub-Servern generiert (siehe publishTime in der API-Referenz). Dieser Ansatz ist aus folgenden Gründen ungenau:

  • Mögliche Zeitverzögerung zwischen Pub/Sub-Servern.

  • Die Tatsache, dass Pub/Sub mit der Ankunftszeit der Veröffentlichungsanfrage arbeiten muss, statt mit einem Ereignis im Quellsystem.

Sie können mit der Console, den Google APIs oder der Google Cloud CLI bis zu einem Zeitstempel suchen. Bevor Sie nach einem Zeitstempel für ein Abo suchen, muss die Nachrichtenaufbewahrung für das Abo aktiviert sein.

Console

Gehen Sie folgendermaßen vor, um zu einem Zeitstempel zu springen:

  1. Rufen Sie in der Google Cloud Console die Seite Abo auf.

    Zum Abo

  2. Klicken Sie auf ein Abo, für das die Nachrichtenaufbewahrung aktiviert ist.

  3. Klicken Sie auf der Seite mit den Abodetails auf Nachrichten wiedergeben.

  4. Klicken Sie unter Suchen auf Zu einem vorherigen Zeitpunkt.

  5. Wählen Sie das Datum und die Uhrzeit aus und klicken Sie auf Suchen.

gcloud

Verwenden Sie den folgenden gcloud pubsub subscriptions seek-Befehl, um zu einem Zeitstempel zu suchen:

gcloud pubsub subscriptions seek SUBSCRIPTION_ID \
    --time=TIME \

Ersetzen Sie Folgendes:

  • TIME: die Zeit, bis zu der Sie den Suchvorgang ausführen möchten.
  • SUBSCRIPTION_ID: die ID des Abos.

Weitere Informationen zu unterstützten Zeitformaten finden Sie unter gcloud topic datetimes.

Bis Snapshot suchen

Sie können nicht bestätigte Nachrichten wiedergeben. Verwenden Sie dazu einen Snapshot, um nach einem beliebigen Abo des Themas zu suchen.

Im Gegensatz zur Suche nach einer Zeit müssen Sie keine spezielle Abokonfiguration durchführen, um nach einem Snapshot zu suchen. Sie müssen den Snapshot nur vorab erstellen. Die Erstellung eines Snapshots ist beispielsweise sinnvoll, wenn Sie neuen Abonnentencode bereitstellen. Denn er bietet die Möglichkeit, nach unerwarteten oder fehlerhaften Quittierungen eine Wiederherstellung durchzuführen.

Wenn der Rückstand im Abo zu alt ist und der resultierende Snapshot in weniger als einer Stunde abläuft, schlägt der Suchvorgang fehl.

Sie können mit der Console, den Google APIs oder der Google Cloud CLI bis zu einem Snapshot suchen.

Console

So suchen Sie zu einem Snapshot:

  1. Rufen Sie in der Google Cloud Console die Seite Abo auf.

    Zum Abo

  2. Klicken Sie auf ein Abo.

  3. Klicken Sie auf der Seite mit den Abodetails auf Nachrichten wiedergeben.

  4. Klicken Sie unter Suchen auf Zu einem Snapshot.

  5. Wählen Sie einen geeigneten Snapshot aus und klicken Sie dann auf Suchen.

gcloud

Verwenden Sie den folgenden gcloud pubsub subscriptions seek-Befehl, um einen Snapshot zu finden:

gcloud pubsub subscriptions seek SUBSCRIPTION_ID \
    --snapshot=SNAPSHOT_ID

Ersetzen Sie Folgendes:

  • SNAPSHOT_ID: die ID eines Snapshots Das Thema des Snapshots muss mit dem des Abos übereinstimmen.
  • SUBSCRIPTION_ID: die ID des Abos.

Mit Filtern suchen

Sie können Nachrichten aus Abos mit Filtern wiedergeben. Wenn Sie einen Zeitstempel mit einem Abo mit Filter suchen, sendet der Pub/Sub-Dienst nur die Nachrichten noch einmal, die dem Filter entsprechen.

Ein Snapshot eines Abos mit einem Filter enthält die folgenden Nachrichten:

  • Alle Nachrichten, die neuer als der Snapshot sind, einschließlich Nachrichten, die nicht mit dem Filter übereinstimmen.
  • Unquittierte Nachrichten, die älter als der Snapshot sind.

Wenn Sie einen Snapshot anhand eines Abos mit einem Filters suchen, sendet der Pub/Sub-Dienst nur diejenigen Nachrichten im Snapshot noch einmal, die dem Filter des Abos entsprechen, von dem die Suchanfrage stammt.

Weitere Informationen zu Filtern finden Sie unter Nachrichten filtern.

Mit Themen für unzustellbare Nachrichten suchen

Wenn Sie Nachrichten in einem Abo mit einem Thema für unzustellbare Nachrichten suchen, legt Pub/Sub die Zustellungsversuche auf 0 fest. Die Nachrichten, die Sie von diesen Abos erhalten, haben ein Feld, das die Anzahl der Zustellungsversuche zählt.

Weitere Informationen zu Themen für unzustellbare Nachrichten finden Sie unter An Themen für unzustellbare Nachrichten weiterleiten.

Mit Wiederholungsrichtlinien suchen

Wenn Sie Nachrichten in einem Abo mit einer Wiederholungsrichtlinie suchen, setzt Pub/Sub die Verzögerung zwischen Folgendem zurück:

  1. Die Quittierungsfrist läuft ab oder der Abonnent sendet eine negative Quittierung.
  2. Pub/Sub sendet die Nachricht noch einmal.

Weitere Informationen zu Wiederholungsrichtlinien finden Sie unter Wiederholungsrichtlinien verwenden.

Suche mit genau einmaliger Auslieferung

Wenn Sie Nachrichten in einem Abo mit genau einmaliger Zustellung suchen, sendet Pub/Sub die zuvor bestätigten Nachrichten, die für die Zustellung infrage kommen, noch einmal. Jegliche Bestätigungen für eine Übermittlung vor dem Suchvorgang schlagen fehl. Suchvorgänge sind letztendlich konsistent.

Weitere Informationen zu Wiederholungsrichtlinien finden Sie unter Exakte Zustellung.