Veröffentlichungsfehler werden in der Regel durch clientseitige Engpässe verursacht, z. B. unzureichende Dienst-CPUs, ein fehlerhafter Threadstatus oder eine Netzwerküberlastung. Die Wiederholungsrichtlinie des Verlags oder Webpublishers definiert die Häufigkeit, mit der Pub/Sub versucht, eine Nachricht zu senden, und die Zeitdauer zwischen den einzelnen Versuchen.
Dieses Dokument enthält Informationen zur Verwendung von Wiederholungsanfragen für Nachrichten, die in einem Thema veröffentlicht wurden.
Hinweise
Bevor Sie den Veröffentlichungsworkflow konfigurieren, müssen Sie die folgenden Aufgaben ausgeführt haben:
Erforderliche Rollen
Damit Sie die Berechtigungen erhalten, die Sie zum Wiederholen von Nachrichtenanfragen an ein Thema benötigen, bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Pub/Sub Publisher (roles/pubsub.publisher
) für das Thema zu gewähren.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Möglicherweise können Sie 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.
Wiederholungsanfragen
Wiederholungseinstellungen steuern, wie die Pub/Sub-Clientbibliotheken Veröffentlichungsanfragen wiederholen. Die Clientbibliotheken haben eine der folgenden Wiederholungseinstellungen:
- 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 wiederholen
Während der Veröffentlichung können vorübergehende oder dauerhafte Veröffentlichungsfehler auftreten. Bei vorübergehenden Fehlern müssen Sie in der Regel keine spezielle Aktion ausführen, da Pub/Sub die Nachrichten automatisch wiederholt.
Ein Fehler kann auch auftreten, wenn ein Veröffentlichungsvorgang erfolgreich ist, die Veröffentlichungsantwort vom Publisher-Client jedoch nicht rechtzeitig empfangen wird. Auch in diesem Fall wird der Veröffentlichungsvorgang wiederholt. Dadurch kann es zu zwei identischen Nachrichten mit unterschiedlichen Nachrichten-IDs kommen.
Bei anhaltenden Fehlern sollten Sie geeignete Maßnahmen außerhalb des Veröffentlichungsprozesses implementieren, um eine Überlastung von Pub/Sub zu vermeiden.
Fehlgeschlagene Veröffentlichungen werden automatisch wiederholt, außer bei Fehlern, die keine Wiederholungsversuche rechtfertigen. Mit diesem Beispielcode wird dargestellt, wie ein Publisher mit benutzerdefinierten Wiederholungseinstellungen erstellt wird. Beachten Sie, dass nicht alle Clientbibliotheken benutzerdefinierte Wiederholungseinstellungen unterstützen. Dazu wird auf die API-Referenzdokumentation für die Sprache Ihrer Wahl verwiesen:
C++
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C++ in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub C++ API.
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.
Einfach loslegen (Go)
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Go in der Schnellstart-Anleitung: Clientbibliotheken verwenden. 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.
Anfragen mit Sortierungsschlüsseln wiederholen
Angenommen, Sie haben nur einen Publisher-Client. Sie verwenden die Pub/Sub-Clientbibliotheken, um die Nachrichten 1, 2 und 3 für denselben Reihenfolgeschlüssel A zu veröffentlichen. Nehmen wir weiter an, dass die veröffentlichte Antwort für Nachricht 1 nicht vor Ablauf des RPC-Zeitlimits vom Publisher-Client empfangen wird. Nachricht 1 muss noch einmal veröffentlicht werden. Die Reihenfolge der vom Abonnentenclient empfangenen Nachrichten wird dann zu 1, 1, 2 und 3, wenn Sie davon ausgehen, dass Nachricht 2 erst veröffentlicht wird, nachdem Nachricht 1 erfolgreich abgeschlossen wurde. Jede veröffentlichte Nachricht hat eine eigene Nachrichten-ID. Aus Sicht des Abonnentenclients wurden vier Nachrichten veröffentlicht, wobei die ersten beiden Nachrichten identisch waren.
Das Wiederholen von Veröffentlichungsanfragen mit Sortierungsschlüsseln kann auch durch Batcheinstellungen erschwert werden. In der Clientbibliothek werden Nachrichten zur effizienteren Veröffentlichung in Batches zusammengefasst. Fahren Sie mit dem vorherigen Beispiel fort und nehmen Sie an, dass die Nachrichten 1 und 2 in Batches zusammengefasst sind. 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 von zwei Nachrichten noch einmal. Daher ist es möglich, dass der Abonnentenclient die Nachrichten 1, 2, 1, 2 und 3 erhält. Wenn Sie eine Pub/Sub-Clientbibliothek verwenden, um Nachrichten der Reihe nach zu veröffentlichen, und ein Veröffentlichungsvorgang fehlschlägt, schlägt der Dienst die Veröffentlichungsvorgänge für alle verbleibenden Nachrichten mit demselben Reihenfolgeschlüssel fehl. Ein Publisher-Client kann dann einen der folgenden Vorgänge ausführen:
Alle fehlerhaften Nachrichten der Reihe nach neu veröffentlichen
Eine Teilmenge der fehlerhaften Nachrichten der Reihe nach noch einmal veröffentlichen
Neue Nachrichtengruppe 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 Referenzdokumentation zur Pub/Sub C++ API.
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.
Einfach loslegen (Go)
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Go in der Schnellstart-Anleitung: Clientbibliotheken verwenden. 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
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Ruby in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Ruby API.
Nächste Schritte
Hier erfahren Sie, wie Sie erweiterte Veröffentlichungsoptionen konfigurieren: