Dieses Dokument bietet einen Überblick über Push-Abos, den zugehörigen Workflow und die zugehörigen Eigenschaften.
Bei der Push-Zustellung initiiert Pub/Sub, wenn es Nachrichten zustellen soll, Anfragen bei Ihrer Abonnentenanwendung. Nachrichten werden an einen öffentlich adressierbaren Server oder einen Webhook, wie etwa eine HTTPS-POST-Anfrage, gesendet.
Push-Abos minimieren Abhängigkeiten von Pub/Sub-spezifischen Clientbibliotheken und Authentifizierungsmechanismen. Sie funktionieren auch gut mit serverlosen und automatisch skalierenden Diensttechnologien wie Cloud Run-Funktionen, Cloud Run und Google Kubernetes Engine.
Hinweis
Bevor Sie dieses Dokument lesen, sollten Sie mit Folgendem vertraut sein:
Funktionsweise von Pub/Sub und die verschiedenen Pub/Sub-Begriffe.
Die verschiedenen Arten von Abos, die von Pub/Sub unterstützt werden, und die Gründe für die Verwendung eines Push-Abos.
Workflow für Push-Abos
Bei einem Push-Abo initiiert ein Pub/Sub-Server eine Anfrage an Ihren Abonnentenclient, um Nachrichten zu senden.
Das folgende Bild zeigt den Workflow zwischen einem Abonnentenclient und einem Push-Abo.
Hier eine kurze Beschreibung des Workflows, der sich auf Abbildung 3 bezieht:
- Der Pub/Sub-Server sendet jede Nachricht als HTTPS-Anfrage an den Abonnentenclient an einem vorkonfigurierten Endpunkt. Diese Anfrage ist im Bild als
PushRequestdargestellt. - Der Endpunkt bestätigt die Nachricht, indem er einen HTTP-Erfolgsstatuscode zurückgibt. Wenn in der Antwort angegeben wird, dass der Vorgang nicht erfolgreich war, muss Pub/Sub die Nachrichten noch einmal senden. Diese Antwort wird im Bild als
PushResponseangezeigt. - Pub/Sub passt die Rate von Push-Anfragen anhand der Rate, mit der Erfolgsantworten empfangen werden, dynamisch an.
Attribute eines Push-Abos
Die Eigenschaften, die Sie für ein Push-Abo konfigurieren, bestimmen, wie Sie Nachrichten in Ihr Abo schreiben. Weitere Informationen finden Sie unter Abo-Attribute.
So empfangen Push-Endpunkte Nachrichten
Wenn Pub/Sub eine Nachricht an einen Push-Endpunkt sendet, können Sie sie unverpackt oder verpackt senden. Standardmäßig werden Nachrichten umgebrochen gesendet.
- Umschlossen Pub/Sub sendet die Nachricht im JSON-Text einer
POST-Anfrage. - Unwrapped. Pub/Sub sendet die Rohdaten der Nachricht direkt als HTTP-Textkörper.
Die folgenden Beispiele zeigen einen umschlossenen Text einer JSON-POST-Anfrage an einen Push-Endpunkt, der den String Hello there im Feld message.data enthält.
Der Text einer POST-Anfrage ist ein JSON-Objekt. Die Nachrichtendaten befinden sich im Feld message.data und sind Base64-codiert.
Beispiel für eine Anfrage mit den Mindestwerten
{ "message": { "data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==", "messageId": "2070443601311540", "message_id": "2070443601311540", "publishTime": "2021-02-26T19:13:55.749Z", "publish_time": "2021-02-26T19:13:55.749Z" }, "subscription": "projects/myproject/subscriptions/mysubscription" }
Beispiel für eine Anfrage mit den Maximalwerten
In diesem Beispiel werden die aktuellen Höchstwerte dargestellt, die sich im Laufe der Zeit ändern können. Außerdem kann die Attributzuordnung eine Vielzahl von Werten enthalten.
{ "deliveryAttempt": 5, "message": { "attributes": { "key": "value" }, "data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==", "messageId": "2070443601311540", "message_id": "2070443601311540", "orderingKey": "key", "publishTime": "2021-02-26T19:13:55.749Z", "publish_time": "2021-02-26T19:13:55.749Z" }, "subscription": "projects/myproject/subscriptions/mysubscription" }
Wenn Sie Nachrichten von Push-Abos erhalten möchten, verwenden Sie einen Webhook und verarbeiten Sie die POST-Anfragen, die Pub/Sub an den Push-Endpunkt sendet. Weitere Informationen zum Verarbeiten dieser POST-Anfragen in App Engine finden Sie unter Pub/Sub-Nachrichten schreiben und beantworten.
Wenn Sie eine Push-Anfrage erhalten haben, geben Sie einen HTTP-Statuscode zurück. Um die Nachricht zu bestätigen, geben Sie einen der folgenden Statuscodes zurück:
102200201202204
Wenn Sie eine negative Bestätigung für die Nachricht senden möchten, geben Sie einen anderen Statuscode zurück. Wenn Sie eine negative Bestätigung senden oder die Bestätigungsfrist abläuft, sendet Pub/Sub die Nachricht noch einmal. Sie können die Bestätigungsfrist für einzelne Nachrichten, die Sie von Push-Abos erhalten, nicht ändern.
Authentifizierung für Push-Abos
Wenn ein Push-Abo die Authentifizierung verwendet, signiert der Pub/Sub-Dienst ein JWT und sendet das JWT im Autorisierungsheader der Push-Anfrage.
Weitere Informationen zum Einrichten der Authentifizierung finden Sie unter Push-Anfragen authentifizieren.
Zustellung von Nachrichten beenden und fortsetzen
Sie können das Senden von Anfragen an den Push-Endpunkt in Pub/Sub vorübergehend anhalten. Ändern Sie dazu das Abo in Pull. Es kann einige Minuten dauern, bis die Änderung wirksam wird.
Zum Fortsetzen der Push-Zustellung wählen Sie für die URL wieder einen gültigen Endpunkt aus. Löschen Sie das Abo, wenn Sie die Zustellung dauerhaft stoppen möchten.
Push-Backoff
Wenn ein Push-Abonnent zu viele negative Bestätigungen sendet, stellt Pub/Sub Nachrichten möglicherweise mit einem Push-Backoff zu. Wenn Pub/Sub einen Push-Backoff verwendet, werden keine Nachrichten mehr für eine bestimmte Zeit zugestellt. Dieser Zeitraum kann zwischen 100 Millisekunden und 60 Sekunden liegen. Nach Ablauf der Zeit beginnt Pub/Sub wieder mit der Zustellung von Nachrichten.
Beim Push-Backoff wird ein exponentieller Backoff-Algorithmus verwendet, um die Verzögerung zu bestimmen, die Pub/Sub zwischen dem Senden von Nachrichten verwendet. Diese Zeit wird anhand der Anzahl negativer Bestätigungen berechnet, die Push-Abonnenten senden.
Wenn ein Push-Abonnent beispielsweise fünf Nachrichten pro Sekunde empfängt und eine negative Bestätigung pro Sekunde sendet, stellt Pub/Sub Nachrichten etwa alle 500 Millisekunden zu. Wenn der Push-Abonnent fünf negative Bestätigungen pro Sekunde sendet, stellt Pub/Sub Nachrichten alle 30 bis 60 Sekunden zu.
Beachten Sie die folgenden Hinweise zum Push-Backoff:
- Die Push-Backoff-Funktion kann nicht aktiviert oder deaktiviert werden. Sie können auch die Werte, die zur Berechnung der Verzögerung verwendet werden, nicht ändern.
- Die folgenden Aktionen können dazu führen, dass die Backoff-Trigger ausgelöst werden:
- Wenn eine negative Bestätigung empfangen wird.
- Wenn die Bestätigungsfrist für eine Nachricht abläuft.
- Der Push-Backoff gilt für alle Nachrichten in einem Abo (global).
Zustellungsrate
Pub/Sub passt die Anzahl der gleichzeitigen Push-Anfragen mithilfe eines Algorithmus für einen langsamen Start an. Die maximal zulässige Anzahl an gleichzeitigen Push-Anfragen ist das Push-Fenster. Das Push-Fenster erhöht sich bei jeder erfolgreichen Übermittlung und verringert sich bei jedem Fehler. Das System beginnt mit einer kleinen einstelligen Fenstergröße.
Wenn ein Abonnent Nachrichten bestätigt, wird das Fenster exponentiell erhöht. Bei Abos, bei denen mehr als 99% der Nachrichten von den Abonnenten bestätigt werden und die durchschnittliche Latenz weniger als eine Sekunde beträgt, sollte das Push-Fenster so erweitert werden, dass es mit dem Publish-Durchsatz mithalten kann.
Die Latenz der Push-Anfrage umfasst Folgendes:
Die Umlauflatenzen zwischen Pub/Sub-Servern und dem Push-Endpunkt
Die Verarbeitungszeit des Abonnenten
Nach 3.000 ausstehenden Nachrichten pro Region erhöht sich das Fenster linear,um zu verhindern, dass der Push-Endpunkt zu viele Nachrichten erhält. Wenn die durchschnittliche Latenz mehr als eine Sekunde beträgt oder der Abonnent weniger als 99% der Anfragen bestätigt, sinkt das Fenster auf das untere Limit von 3.000 ausstehenden Nachrichten.
Weitere Informationen zu den Messwerten, die Sie für das Monitoring der Push-Zustellung verwenden können, finden Sie unter Push-Abos beobachten.
Kontingente und Limits
Push-Abos unterliegen einer Reihe von Kontingent- und Ressourcenbeschränkungen.
Nächste Schritte
Erstellen Sie ein Push-Abo für Ihr Thema.
Fehlerbehebung bei Push-Abos
Erstellen oder ändern Sie ein Abo mit der gcloud CLI.
Abonnements mit REST APIs erstellen oder ändern
Abo mit RPC-APIs erstellen oder ändern