Push-Abos

Dieses Dokument bietet eine Übersicht über ein Push-Abo, seinen Workflow und die zugehörigen Attribute.

Bei der Push-Zustellung initiiert Pub/Sub Anfragen an Ihre Abonnentenanwendung, um Nachrichten zu senden. Nachrichten werden an einen öffentlich adressierbaren Server oder einen Webhook gesendet, z. B. eine HTTPS-POST-Anfrage.

Push-Abos minimieren die Abhängigkeiten von Pub/Sub-spezifischen Clientbibliotheken und Authentifizierungsmechanismen. Sie funktionieren auch gut mit serverlosen und Autoscaling-Diensttechnologien wie Cloud Functions, Cloud Run und Google Kubernetes Engine.

Hinweise

Machen Sie sich vor dem Lesen dieses Dokuments mit Folgendem vertraut:

Push-Abo-Workflow

Bei einem Push-Abo initiiert ein Pub/Sub-Server eine Anfrage an deinen Abonnentenclient, um Nachrichten zu senden.

Die folgende Abbildung zeigt den Workflow zwischen einem Abonnentenclient und einem Push-Abo.

Nachrichtenfluss für ein Push-Abo
Abbildung 3: Workflow für ein Push-Abo

Es folgt eine kurze Beschreibung des Workflows, der auf Abbildung 3 verweist:

  1. Der Pub/Sub-Server sendet jede Nachricht als HTTPS-Anfrage an den Abonnentenclient an einem vorkonfigurierten Endpunkt. Diese Anfrage wird im Bild als PushRequest angezeigt.
  2. Der Endpunkt bestätigt die Nachricht, indem er einen HTTP-Erfolgsstatuscode zurückgibt. Wenn die Antwort fehlschlägt, bedeutet das, dass Pub/Sub die Nachrichten noch einmal senden muss. Diese Antwort wird im Bild als PushResponse angezeigt.
  3. Pub/Sub passt die Rate von Push-Anfragen anhand der Rate, mit der Erfolgsantworten empfangen werden, dynamisch an.

Attribute eines Push-Abos

Die Attribute, die Sie für ein Push-Abo konfigurieren, bestimmen, wie Sie Nachrichten in Ihr Abo schreiben. Weitere Informationen findest du unter Aboattribute.

So empfangen Push-Endpunkte Nachrichten

Wenn Pub/Sub eine Nachricht an einen Push-Endpunkt zustellt, können Sie sie verpacken oder entpacken senden. Standardmäßig werden Nachrichten umschlossen.

  • Verpackt. Pub/Sub sendet die Nachricht im JSON-Text einer POST-Anfrage.
  • Unverpackt Pub/Sub sendet die Rohdaten der Nachricht direkt als HTTP-Text.

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 einer 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 einer Anfrage mit den Maximalwerten

Beachten Sie, dass dieses Beispiel die aktuellen Maximalwerte zeigt, die sich im Laufe der Zeit ändern können. Darüber hinaus 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:

  • 102
  • 200
  • 201
  • 202
  • 204

Um eine negative Bestätigung für die Nachricht zu senden, geben Sie einen beliebigen 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 einzelner 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 es im Autorisierungsheader der Push-Anfrage.

Weitere Informationen zum Einrichten der Authentifizierung finden Sie unter Push-Anfragen authentifizieren.

Nachrichtenzustellung 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, beginnt Pub/Sub möglicherweise mit der Übermittlung von Nachrichten mithilfe eines Push-Backoffs. Wenn Pub/Sub einen Push-Backoff verwendet, werden für einen festgelegten Zeitraum keine Nachrichten mehr zugestellt. Diese Zeitspanne kann zwischen 100 Millisekunden und 60 Sekunden liegen. Nach Ablauf dieser Zeit beginnt Pub/Sub wieder mit der Übermittlung von Nachrichten.

Der Push-Backoff verwendet einen exponentiellen Backoff-Algorithmus, um die Verzögerung zu bestimmen, die Pub/Sub zwischen dem Senden von Nachrichten verwendet. Dieser Zeitraum wird anhand der Anzahl negativer Bestätigungen berechnet, die Abonnenten per Push 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. Oder wenn der Push-Abonnent fünf negative Bestätigungen pro Sekunde sendet, sendet Pub/Sub alle 30 bis 60 Sekunden Nachrichten.

Beachten Sie die folgenden Überlegungen zum Push-Backoff:

  • Der Push-Backoff kann nicht aktiviert oder deaktiviert werden. Sie können auch nicht die Werte ändern, die zur Berechnung der Verzögerung verwendet werden.
  • Push-Backoff-Trigger für die folgenden Aktionen:
    • Wenn eine negative Bestätigung empfangen wird.
    • Wenn die Bestätigungsfrist einer 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 Slow-Start-Algorithmus an. Die maximal zulässige Anzahl gleichzeitiger Push-Anfragen ist das Push-Fenster. Das Push-Fenster erhöht sich bei jeder erfolgreichen Übermittlung und verringert sich bei einem Fehler. Das System beginnt mit einer kleinen einstelligen Fenstergröße.

Wenn ein Abonnent Nachrichten bestätigt, verlängert sich das Fenster exponentiell. Bei Abos, bei denen Abonnenten mehr als 99% der Nachrichten bestätigen und im Durchschnitt weniger als eine Sekunde Push-Anfragelatenz liegt, sollte das Push-Fenster so weit erweitert werden, dass sie mit dem Veröffentlichungsdurchsatz Schritt halten kann.

Die Latenz der Push-Anfrage umfasst Folgendes:

  • Die Umlauf-Netzwerklatenz zwischen Pub/Sub-Servern und dem Push-Endpunkt

  • Die Verarbeitungszeit des Abonnenten

Nach 3.000 ausstehenden Nachrichten pro Region wird das Fenster linear erweitert,um zu verhindern, dass der Push-Endpunkt zu viele Nachrichten empfängt. Wenn die durchschnittliche Latenz eine Sekunde überschreitet oder der Abonnent weniger als 99% der Anfragen bestätigt, verringert sich das Zeitfenster auf die Untergrenze 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 quotas und Ressourcenlimits.

Nächste Schritte

  • Erstellen Sie ein Push-Abo für Ihr Thema.

  • Abo mit der gcloud CLI erstellen oder ändern

  • Abo mit REST APIs erstellen oder ändern

  • Abo mit RPC APIs erstellen oder ändern.