Nachdem Sie Nachrichten in Pub/Sub bestätigt haben, können Abonnentenclients 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 Funktion Seek erweitert die Möglichkeiten 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 Quittierungsstatus eines Abos in ein anderes Abo kopieren. Dafür wird die Suchfunktion mit einem Snapshot kombiniert.
Eine kurze Demonstration der Funktionsweise dieser Features 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 Nachrichtenquittierung (Acknowledgement, Ack) eines Abos zu einem bestimmten Zeitpunkt. Durch einen Snapshot wird der Quittierungsstatus aller Nachrichten in einem Abo zum Zeitpunkt der Erstellung erfasst. Ein Snapshot enthält die nicht quittierten Nachrichten des Quellabos zum Zeitpunkt der Erstellung des Snapshots sowie alle Nachrichten, die nach der Erstellung des Snapshots zum Thema veröffentlicht wurden.
Die Lebensdauer eines Snapshots wird durch den vorhandenen Rückstand des Quellabos bestimmt. Die Lebensdauer entspricht 7 Tagen minus dem Alter der ältesten nicht quittierten Nachricht im Abo. Beispiel: Im Snapshot eines Abos mit Rückstand ist die älteste nicht quittierte Nachricht einen Tag alt. Der Snapshot läuft nach 6 Tagen ab. Dieser Zeitplan ist notwendig, damit die Snapshots die Garantie mindestens einer Zustellung bieten können.
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 Funktion „Seek“ können Sie in einem Abo nach einem bestimmten Snapshot oder Zeitstempel suchen. Mit dieser Funktion können Sie steuern, wie Pub/Sub Nachrichten ab einem bestimmten Zeitpunkt oder aus einem bestimmten Snapshot zustellen kann.
Um bis zu einem Zeitpunkt in der Vergangenheit zu suchen und zuvor quittierte Nachrichten noch einmal wiederzugeben, müssen Sie die Nachrichtenaufbewahrung für das Thema konfigurieren oder das Abo so konfigurieren, dass quittierte Nachrichten aufbewahrt werden. Hier finden Sie weitere Informationen:
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 quittiert markiert wurden, werden garantiert irgendwann 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.
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 Snapshots Seite 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 eines Themas, 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 sofort nach dem Erstellen eines Abos erstellen, kann es aufgrund der Weiterleitungsverzögerung für das neu erstellte Abo zu einem Fehler kommen.
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:
Wenn Sie alle Nachrichten dauerhaft löschen möchten, können Sie bis zu einem Zeitpunkt in der Zukunft suchen.
Wenn Sie zuvor quittierte 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 bis zu einem Zeitstempel mit der Console, den Google APIs oder der Google Cloud CLI suchen. Bevor Sie in einem Abo bis zu einem Zeitstempel suchen, muss die Nachrichtenaufbewahrung für das Abo aktiviert sein.
Console
So suchen Sie bis 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 wiedergeben.
Klicken Sie unter Suchen auf Bis zu einem früheren Zeitpunkt.
Wählen Sie ein geeignetes Datum und eine geeignete Uhrzeit aus und klicken Sie dann auf Suchen.
gcloud
Verwenden Sie den
folgenden
gcloud pubsub subscriptions seek
Befehl, um bis zu einem Zeitstempel zu suchen:
gcloud pubsub subscriptions seek SUBSCRIPTION_ID \ --time=TIME \
Ersetzen Sie Folgendes:
- TIME: Der Zeitpunkt, bis zu dem 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 in einem Snapshot nach den nicht quittierten 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 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 bis zu einem Snapshot mit der Console, den Google APIs oder der Google Cloud CLI suchen.
Console
So suchen Sie bis 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 Bis zu einem Snapshot.
Wählen Sie einen geeigneten Snapshot aus und klicken Sie dann auf Suchen.
gcloud
Verwenden Sie den
folgenden
gcloud pubsub subscriptions seek
Befehl, um bis zu einem Snapshot zu suchen:
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.
Suchen mit Filtern
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.
Suchen 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:
- 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 einmaliger Zustellung
Wenn Sie Nachrichten in einem Abo mit genau einmaliger Zustellung suchen, sendet Pub/Sub die zuvor quittierten Nachrichten noch einmal, die für die Zustellung infrage kommen. Alle Quittierungen für eine Zustellung vor dem Suchvorgang schlagen fehl. Suchvorgänge mit Seek sind eventual konsistent.
Weitere Informationen zu Wiederholungsrichtlinien finden Sie unter Genau einmalige Zustellung.