Nachrichten mit Suchfunktion wiedergeben und löschen

Nachdem Sie Nachrichten in Pub/Sub bestätigt haben, sind sie für den Abonnentenclient nicht mehr zugänglich. Außerdem müssen Abonnentenclients alle Nachrichten in einem Abo verarbeiten, auch wenn nur einige davon benötigt werden.

Die Suchfunktion seek erweitert die Funktionalität der Abonnenten, denn sie haben die Möglichkeit, den Quittierungsstatus von Nachrichten im Block zu ändern. Sie können zum Beispiel zuvor quittierte Nachrichten im Block wiedergeben oder Nachrichten im Block dauerhaft löschen. Darüber hinaus können Sie den Bestätigungsstatus eines Abos in ein anderes Abo kopieren. Dafür wird die Suchfunktion mit einem Snapshot kombiniert.

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

Snapshot und Seek – Übersicht

Ein Pub/Sub-Snapshot ist eine langlebige, konsistente und zuverlässige Ansicht des Status der Nachrichtenbestätigung (Ack) eines Abos zu einem bestimmten Zeitpunkt. In einem Snapshot wird der Status der Bestätigung aller Nachrichten in einem Abo zum Zeitpunkt der Erstellung erfasst. Ein Snapshot enthält die nicht bestätigten Nachrichten des Quellabos zum Zeitpunkt der Erstellung des Snapshots sowie alle Nachrichten, die nach der Erstellung des Snapshots für das Thema veröffentlicht wurden.

Die Lebensdauer eines Snapshots wird durch den vorhandenen Rückstand des Quellabos bestimmt. Die Lebensdauer entspricht 7 Tagen abzüglich des Alters der ältesten nicht bestätigten Nachricht im Abo. Beispiel: Im Snapshot eines Abos mit Rückstand ist die älteste nicht bestätigte Nachricht einen Tag alt. Der Snapshot läuft nach 6 Tagen ab. Dieser Zeitplan ist notwendig, damit die Snapshots die Garantie mindestens einer Zustellung anbieten können.

Die maximale 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 zu einem bestimmten Snapshot oder Zeitstempel für ein Abo springen. Mit dieser Funktion können Sie steuern, wie Pub/Sub Nachrichten von einem bestimmten Zeitpunkt oder aus 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.

Endgültige Konsistenz von Suchvorgängen

Suchvorgänge mit Seek sind in Bezug auf die Nachrichtenzustellgarantie strikt konsistent. Das heißt, alle Nachrichten, die aufgrund der Suchbedingung als nicht bestätigt markiert wurden, werden garantiert mindestens einmal zugestellt, wenn der Suchvorgang erfolgreich war. Zugestellte Nachrichten werden jedoch nicht sofort mit dem Suchvorgang konsistent sein. 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 Nachrichtenzustellung in Bezug auf den Suchvorgang nach dem Modell der Eventual Consistency, bei dem sich die Konsistenz „irgendwann“ einstellt. Es kann bis zu einer Minute dauern, bis der Vorgang wirksam wird.

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 für eines seiner Abos so konfigurieren, dass quittierte Nachrichten aufbewahrt werden. Sie können die Nachrichtenaufbewahrung für das Thema konfigurieren, wenn Nachrichten zur Wiedergabe länger aufbewahrt werden sollen, als durch die Nachrichtenaufbewahrung, die für das Abo konfiguriert wurde, vorgesehen. In diesem Fall werden das Projekt des Themas und das Projekt des Abos gemäß den jeweiligen Einstellungen der Nachrichtenaufbewahrung für den Nachrichtenspeicher 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. Die Konfiguration eines Themas mit Nachrichtenaufbewahrung bietet mehr Flexibilität und ermöglicht jedem mit dem Thema verknüpften Abo, zurück in die Vergangenheit zu gehen und zuvor bestätigte Nachrichten bis zum message_retention_duration des Themas noch einmal wiederzugeben. Die Aufbewahrung von Themennachrichten ermöglicht es einem Abo auch, Nachrichten zu wiederholen, 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 die Speicherkosten für die vom Thema gespeicherten Nachrichten dem Projekt des Themas in Rechnung gestellt.

Console

So erstellen Sie ein Thema mit aktivierter Nachrichtenaufbewahrung:

  1. Öffnen Sie in der Google Cloud Console die Seite Pub/Sub-Themen.

    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 Aufbewahrungsdauer für Nachrichten festlegen.

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

  5. Wählen Sie im Drop-down-Menü Aufbewahrungsdauer von Nachrichten die Anzahl der Tage, Stunden und Minuten aus, 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/deaktivieren Sie die Nachrichtenaufbewahrung, indem Sie auf Nachrichtenaufbewahrung aktivieren klicken oder das Häkchen daraus entfernen.

  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 speichert Nachrichten im Namen eines Abos, sobald das Abo erstellt wurde. Standardmäßig verwirft Pub/Sub eine Nachricht aus einem Abo, sobald sie bestätigt wurde. Unbestätigte Nachrichten werden standardmäßig sieben Tage lang gespeichert (konfigurierbar über das Attribut message_retention_duration des Abos).

Wenn Sie ein Abo so konfigurieren, dass quittierte Nachrichten aufbewahrt werden (mit dem Attribut retain_acked_messages), können Sie zuvor quittierte Nachrichten wiedergeben, die vom Abo aufbewahrt wurden. Sie können Nachrichten so konfigurieren, dass sie in einem Abo maximal 31 Tage lang aufbewahrt werden. Diese Konfiguration gilt sowohl für bestätigte als auch für nicht bestätigte Nachrichten.

Wenn ein Abo so konfiguriert ist, dass quittierte Nachrichten aufbewahrt werden, werden die Speicherkosten für die vom Abo aufbewahrten quittierten 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ü Aufbewahrungsdauer von Nachrichten die Anzahl der Tage, Stunden und Minuten aus, die Nachrichten aufbewahrt werden sollen.

  5. Aktivieren Sie Bestätigte Nachrichten speichern. Ü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 Dauer der Nachrichtenaufbewahrung an oder aktivieren/deaktivieren Sie die Aufbewahrung quittierter Nachrichten, indem Sie das Kästchen Bestätigte Nachrichten speichern anklicken oder 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. Auf diese Weise können Sie auch die Aufbewahrung quittierter 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 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 für die Benennung von Themen, Abos, Schemas oder Snapshots.

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

Sie können einen Snapshot auch auf der Seite Abos erstellen. Wenn Sie einen Snapshot direkt nach dem Erstellen eines Abos erstellen, kann aufgrund der Übertragungsverzögerung für das neu erstellte Abo ein Fehler auftreten.

gcloud

Verwenden Sie zum Erstellen eines Snapshots den folgenden Befehl gcloud pubsub snapshots create:

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.

Du kannst die folgenden Arten von Suchvorgängen basierend auf Zeitstempeln ausführen:

  • Wenn Sie alle Nachrichten dauerhaft löschen möchten, können Sie die Nachrichten bis zu einem Zeitpunkt in der Zukunft suchen.

  • Wenn Sie zuvor bestätigte Nachrichten wiedergeben und noch einmal verarbeiten möchten, suchen Sie alle Nachrichten bis zu einem früheren Zeitpunkt.

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 zu einem Zeitstempel springen. Bevor Sie zu einem Zeitstempel in einem Abo springen, muss die Nachrichtenaufbewahrung für das Abo aktiviert sein.

Console

So springen Sie zu einem Zeitstempel:

  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 noch einmal abspielen.

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

  5. Wählen Sie ein passendes Datum und eine Uhrzeit aus und klicken Sie auf Suchen.

gcloud

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

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

Ersetzen Sie Folgendes:

  • TIME: Die Zeit, zu der der Suchvorgang ausgeführt werden soll.
  • SUBSCRIPTION_ID: die ID des Abos.

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

Bis Snapshot suchen

Sie können in einem Snapshot nach den unbestätigten Nachrichten suchen, die zu den Abos eines Themas gehören, und diese wiedergeben.

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 Backlog im Abo zu alt ist und der resultierende Snapshot in weniger als einer Stunde abläuft, schlägt der Suchvorgang fehl.

Sie können einen Snapshot über die Console, die Google APIs oder die Google Cloud CLI aufrufen.

Console

So springen 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 noch einmal abspielen.

  4. Klicken Sie unter Suchen auf Zu einem Snapshot.

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

gcloud

Verwenden Sie den folgenden Befehl gcloud pubsub subscriptions seek, um zu einem Snapshot zu springen:

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.

Suche mit Themen für unzustellbare Nachrichten

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.

Suchen mit Wiederholungsrichtlinien

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.

Suchen mit genau einmaliger Zustellung

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

Weitere Informationen zu Wiederholungsrichtlinien finden Sie unter Einmalige Zustellung.