Nachdem Sie Nachrichten in Pub/Sub bestätigt haben, werden diese Nachrichten zu für den Abonnentenclient nicht zugänglich sind. 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 der Abonnenten um So können Sie den Bestätigungsstatus von Nachrichten im Bulk-Verfahren ä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 kopieren. in einen anderen über die Suche in Kombination mit einem Snapshot verschieben.
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 hängt vom vorhandenen Rückstand der Quelle ab Abo. Die Lebensdauer entspricht 7 Tagen abzüglich des Alters der ältesten Person. unbestätigte 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 Abo. Mit diesem Feature können Sie steuern, wie Pub/Sub Nachrichten zu einem bestimmten Zeitpunkt oder aus einem bestimmten Snapshot zustellen.
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
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 mit der Suche vereinbar 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 ein Eventual-Consistency-System; kann es dauern, so lange, bis der Vorgang vollständig 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 konfigurieren und ihre Abos, um bestätigte Nachrichten aufzubewahren. 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 dieser werden das Projekt des Themas und das Projekt des Abos Nachrichtenspeicher entsprechend den jeweiligen Einstellungen für die Nachrichtenaufbewahrung entsprechen.
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:
Öffnen Sie in der Google Cloud Console die Seite Pub/Sub-Themen.
Klicken Sie auf Thema erstellen.
Geben Sie im Feld Themen-ID eine ID für das Thema ein.
Aktivieren Sie die Option Aufbewahrungsdauer für Nachrichten festlegen.
Übernehmen Sie für die restlichen Optionen die Standardeinstellungen.
Wählen Sie im Drop-down-Menü Aufbewahrungsdauer für Nachrichten die gewünschte Anzahl der Tage, Stunden und Minuten für die Aufbewahrung von Nachrichten
Klicken Sie auf Thema erstellen, um das Thema zu speichern.
So aktualisieren Sie die Einstellungen für die Nachrichtenaufbewahrung eines Themas:
Wählen Sie Ihr Thema auf der Seite Pub/Sub-Themen aus.
Klicken Sie oben auf der Seite mit den Themendetails auf Bearbeiten.
Passen Sie die Aufbewahrungsdauer an oder aktivieren/deaktivieren Sie die Nachrichtenaufbewahrung, indem Sie auf Nachrichtenaufbewahrung aktivieren klicken oder das Häkchen daraus entfernen.
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.
Nicht bestätigte Nachrichten werden standardmäßig 7 Tage lang aufbewahrt (konfigurierbar durch
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. Dieses
Konfiguration sowohl für bestätigte als auch für nicht bestätigte Nachrichten gilt.
Wenn ein Abo so konfiguriert ist, dass bestätigte Nachrichten aufbewahrt werden, werden die im Abo aufbewahrten bestätigten Nachrichten des Abos.
Console
So erstellen Sie ein Abo mit aktivierter Aufbewahrung quittierter Nachrichten:
Rufen Sie in der Google Cloud Console die Seite Pub/Sub-Abos auf.
Klicken Sie auf Abo erstellen.
Geben Sie im Feld Abo-ID eine ID für Ihr Abo ein.
Wählen Sie im Drop-down-Menü Aufbewahrungsdauer von Nachrichten die Anzahl der Tage, Stunden und Minuten aus, die Nachrichten aufbewahrt werden sollen.
Aktivieren Sie Bestätigte Nachrichten aufbewahren. Übernehmen Sie für die restlichen Optionen die Standardeinstellungen.
Klicken Sie auf Abo erstellen, um das Abo zu speichern.
So aktualisieren Sie die Einstellungen für die Nachrichtenaufbewahrung eines Abos:
Wählen Sie auf der Seite Pub/Sub-Abos Ihr Abo aus.
Klicken Sie oben auf der Seite mit den Abodetails auf Bearbeiten.
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.
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. Damit können Sie auch die Aufbewahrung bestätigter Nachrichten für eine vorhandene
Abo:
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:
Rufen Sie in der Google Cloud Console die Seite Snapshots auf.
Klicken Sie auf Snapshot erstellen.
Wählen Sie unter Pub/Sub-Abo auswählen ein Abo aus.
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.
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.
Sie können die folgenden Arten von Suchvorgängen basierend auf Zeitstempeln ausführen:
Wenn Sie alle Nachrichten dauerhaft löschen möchten, können Sie zu einem Zeitpunkt in der Zukunft springen.
Wenn Sie zuvor bestätigte Nachrichten wiedergeben und noch einmal verarbeiten möchten, suchen Sie alle Nachrichten bis zu einem früheren Zeitpunkt.
Der Zeitpunkt der Nachrichtenveröffentlichung wird von Pub/Sub 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 spulst du zu einem Zeitstempel:
Rufen Sie in der Google Cloud Console die Seite Abo auf.
Klicken Sie auf ein Abo, für das die Nachrichtenaufbewahrung aktiviert ist.
Klicken Sie auf der Seite mit den Abodetails auf Nachrichten noch einmal abspielen.
Klicken Sie unter Spulen auf Zu einem früheren Zeitpunkt.
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 findest du unter gcloud topic datetimes ändern.
Zu Snapshot springen
Sie können unbestätigte Nachrichten wiedergeben, indem Sie mithilfe eines Snapshots zu beliebigen Abos des Themas.
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 1 Stunde ablaufen würde, schlägt der Suchvorgang fehl.
Sie können mit der Console, den Google APIs oder dem Google Cloud CLI
Console
So springen Sie zu einem Snapshot:
Rufen Sie in der Google Cloud Console die Seite Abo auf.
Klicken Sie auf ein Abo.
Klicken Sie auf der Seite mit den Abodetails auf Nachrichten wiedergeben.
Klicken Sie unter Suchen auf Zu einem Snapshot.
Wählen Sie einen geeigneten Snapshot aus und klicken Sie dann auf Suchen.
gcloud
Um zu einem Snapshot zu springen, verwenden Sie die Methode
Follower
gcloud pubsub subscriptions seek
Befehl:
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.
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:
- Die Quittierungsfrist läuft ab oder der Abonnent sendet eine negative Quittierung.
- Pub/Sub sendet die Nachricht noch einmal.
Weitere Informationen zu Wiederholungsrichtlinien finden Sie unter Wiederholungsrichtlinien verwenden.
Suchen mit genau einmal zugestellt
Wenn Sie Nachrichten in einem Abo mit genau einmaliger Zustellung suchen, Pub/Sub sendet die zuvor bestätigten Nachrichten, die lieferbar sind. 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.