Veröffentlichungsfehler werden in der Regel durch clientseitige Engpässe verursacht, z. B. unzureichende Service-CPUs, schlechte Thread-Integrität oder Netzwerküberlastung. Die Publisher-Richtlinie für Wiederholungen definiert, wie oft Pub/Sub versucht, eine Nachricht zuzustellen, und wie viel Zeit zwischen den einzelnen Versuchen vergeht.
Dieses Dokument enthält Informationen zur Verwendung von Wiederholungsanfragen mit Nachrichten, die in einem Thema veröffentlicht werden.
Hinweis
Bevor Sie den Veröffentlichungs-Workflow konfigurieren, müssen Sie die folgenden Aufgaben ausführen:
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Pub/Sub Publisher (roles/pubsub.publisher) für das Thema zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Wiederholen von Nachrichtenanfragen an ein Thema benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Sie benötigen zusätzliche Berechtigungen, um Themen und Abos zu erstellen oder zu aktualisieren.
Anfragen wiederholen
Wiederholungseinstellungen steuern, wie die Pub/Sub-Clientbibliotheken Veröffentlichungsanfragen wiederholen. Die Clientbibliotheken haben die folgenden Einstellungen für Wiederholungsversuche:
- Zeitüberschreitung der ersten Anfrage: Die Zeitspanne, nach der eine Clientbibliothek nicht mehr auf die Fertigstellung der ersten Veröffentlichungsanfrage wartet.
- Wiederholungsverzögerung: Die Zeitspanne, die eine Clientbibliothek nach der Zeitüberschreitung einer Anfrage wartet, bevor sie die Anfrage wiederholt.
- Gesamtzeitüberschreitung: Die Zeitspanne, nach der eine Clientbibliothek keine weiteren Veröffentlichungsanfragen mehr wiederholt.
Damit Veröffentlichungsanfragen wiederholt werden können, muss die Zeitüberschreitung der ersten Anfrage kürzer sein als die Gesamtzeitüberschreitung. Wenn Sie beispielsweise exponentiellen Backoff verwenden, berechnen die Clientbibliotheken das Anfragezeitlimit und die Wiederholungsverzögerung folgendermaßen:
- Nach jeder Veröffentlichungsanfrage erhöht sich das Anfragezeitlimit um den Zeitüberschreitungsfaktor der Anfrage bis zum maximalen Anfragezeitlimit.
- Nach jedem Wiederholungsversuch erhöht sich die Wiederholungsverzögerung um den Wiederholungsverzögerungsfaktor bis zur maximalen Wiederholungsverzögerung.
Nachrichtenanfrage noch einmal senden
Während der Veröffentlichung können vorübergehende oder dauerhafte Fehler auftreten. Bei vorübergehenden Fehlern müssen Sie in der Regel keine besonderen Maßnahmen ergreifen, da Pub/Sub die Nachrichten automatisch noch einmal sendet.
Ein Fehler kann auch auftreten, wenn ein Veröffentlichungsvorgang erfolgreich ist, die Veröffentlichungsantwort aber nicht rechtzeitig vom Publisher-Client empfangen wird. Auch in diesem Fall wird der Veröffentlichungsvorgang noch einmal versucht. Daher kann es zwei identische Nachrichten mit unterschiedlichen Nachrichten-IDs geben.
Bei anhaltenden Fehlern sollten Sie geeignete Maßnahmen außerhalb des Veröffentlichungsprozesses ergreifen, um Pub/Sub nicht zu überlasten.
Veröffentlichungsfehler werden automatisch wiederholt, außer bei Fehlern, die keine Wiederholungen rechtfertigen. In diesem Beispielcode wird gezeigt, wie Sie einen Publisher mit benutzerdefinierten Wiederholungseinstellungen erstellen. Beachten Sie, dass nicht alle Clientbibliotheken benutzerdefinierte Wiederholungseinstellungen unterstützen. Weitere Informationen finden Sie in der API‑Referenzdokumentation für die von Ihnen ausgewählte Sprache:
C++
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C++ in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Pub/Sub C++ API-Referenzdokumentation.
C#
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C# in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub C# API.
Go
Im folgenden Beispiel wird die Hauptversion der Go Pub/Sub-Clientbibliothek (v2) verwendet. Wenn Sie noch die v1-Bibliothek verwenden, finden Sie hier die Migrationsanleitung zu v2. Eine Liste der Codebeispiele für Version 1 finden Sie unter Eingestellte Codebeispiele.
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Go-Einrichtungsanleitung in der Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Go API.
Java
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Java in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Java API.
Node.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.
Node.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.
Python
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Python in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Python API.
Rust
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Rust in der Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub Rust API-Referenzdokumentation.
Anfragen mit Reihenfolgeschlüsseln wiederholen
Angenommen, Sie haben einen einzelnen Publisher-Client. Sie verwenden die Pub/Sub-Clientbibliotheken, um die Nachrichten 1, 2 und 3 für denselben Sortierungsschlüssel A zu veröffentlichen. Angenommen, die veröffentlichte Antwort für Nachricht 1 wird vom Publisher-Client nicht empfangen, bevor die RPC-Frist abläuft. Nachricht 1 muss noch einmal veröffentlicht werden. Die Reihenfolge der Nachrichten, die vom Abonnentenclient empfangen werden, ist dann 1, 1, 2 und 3, wenn davon ausgegangen wird, dass Nachricht 2 erst nach erfolgreichem Abschluss von Nachricht 1 veröffentlicht wird. Jede veröffentlichte Nachricht hat eine eigene Nachrichten-ID. Aus Sicht des Abonnentenclients wurden vier Nachrichten veröffentlicht, wobei die ersten beiden identische Inhalte haben.
Das Wiederholen von Veröffentlichungsanfragen mit Sortierschlüsseln kann auch durch Batcheinstellungen erschwert werden. In der Clientbibliothek werden Nachrichten für eine effizientere Veröffentlichung zusammengefasst. Wir setzen das vorherige Beispiel fort und gehen davon aus, dass die Nachrichten 1 und 2 zusammengefasst werden. Dieser Batch wird als einzelne Anfrage an den Server gesendet. Wenn der Server nicht rechtzeitig eine Antwort zurückgibt, wiederholt der Publisher-Client diesen Batch mit zwei Nachrichten. Daher ist es möglich, dass der Abonnentenclient die Nachrichten 1, 2, 1, 2 und 3 empfängt. Wenn Sie eine Pub/Sub-Clientbibliothek zum Veröffentlichen von Nachrichten in der richtigen Reihenfolge verwenden und ein Veröffentlichungsvorgang fehlschlägt, schlägt der Dienst die Veröffentlichungsvorgänge für alle verbleibenden Nachrichten mit demselben Sortierschlüssel fehl. Ein Publisher-Client kann dann eine der folgenden Aktionen ausführen:
Alle fehlgeschlagenen Nachrichten in der richtigen Reihenfolge noch einmal veröffentlichen
Eine Teilmenge der fehlgeschlagenen Nachrichten in der richtigen Reihenfolge noch einmal veröffentlichen
Neue Nachrichten veröffentlichen
Wenn ein nicht wiederholbarer Fehler auftritt, veröffentlicht die Clientbibliothek die Nachricht nicht und veröffentlicht keine weiteren Nachrichten mit demselben Reihenfolgeschlüssel. Wenn ein Publisher beispielsweise eine Nachricht an ein nicht vorhandenes Thema sendet, tritt ein nicht wiederholbarer Fehler auf. Wenn Sie weitere Nachrichten mit demselben Reihenfolgenschlüssel veröffentlichen möchten, rufen Sie eine Methode auf, um die Veröffentlichung fortzusetzen und dann wieder zu veröffentlichen.
Im folgenden Beispiel wird gezeigt, wie Nachrichten mit demselben Reihenfolgeschlüssel wieder veröffentlicht werden.
C++
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C++ in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Pub/Sub C++ API-Referenzdokumentation.
C#
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C# in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub C# API.
Go
Im folgenden Beispiel wird die Hauptversion der Go Pub/Sub-Clientbibliothek (v2) verwendet. Wenn Sie noch die v1-Bibliothek verwenden, finden Sie hier die Migrationsanleitung zu v2. Eine Liste der Codebeispiele für Version 1 finden Sie unter Eingestellte Codebeispiele.
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Go-Einrichtungsanleitung in der Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Go API.
Java
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Java in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Java API.
Node.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.
Python
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Python in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Python API.
Ruby
Im folgenden Beispiel wird die Ruby Pub/Sub-Clientbibliothek v3 verwendet. Wenn Sie noch die v2-Bibliothek verwenden, finden Sie hier die Migrationsanleitung für v3. Eine Liste der Ruby v2-Codebeispiele finden Sie unter eingestellte Codebeispiele.
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Anleitung zur Einrichtung von Ruby in der Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Ruby API.
Rust
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Rust in der Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub Rust API-Referenzdokumentation.
Nächste Schritte
Informationen zum Konfigurieren erweiterter Veröffentlichungsoptionen finden Sie in den folgenden Artikeln: