Beim Erstellen Ihres Pub/Sub-Systems kann das Entpacken der Nutzlast Ihnen helfen, eine Verbindung zu anderen Systemen herzustellen, die nicht alle Systemanforderungen einer standardmäßigen Pub/Sub-Push-Endpunktimplementierung erfüllen.
Hier einige mögliche Anwendungsfälle für das Entpacken von Nutzlasten:
- Sie möchten keinen Pub/Sub-spezifischen Code zum Parsen von Nachrichten für Ihre HTTP-Push-Endpunkte schreiben.
- Sie möchten Pub/Sub-Nachrichtenmetadaten lieber als HTTP-Header anstelle der Metadaten im HTTP POST-Text empfangen.
- Sie möchten Pub/Sub-Nachrichten senden und die Pub/Sub-Metadaten ausschließen, z. B. wenn Sie Daten an eine Drittanbieter-API senden.
Funktionsweise des Entpackens der Nutzlast
Das Entpacken der Nutzlast ist ein Feature, mit dem alle Metadaten aus Pub/Sub-Nachrichten entfernt werden, mit Ausnahme der Nachrichtendaten. Durch das Senden von Rohdaten können Abonnenten die Nachricht verarbeiten, ohne die Systemanforderungen von Pub/Sub einhalten zu müssen.
- Beim Entpacken der Nutzlast werden die Nachrichtendaten direkt als HTTP-Body bereitgestellt.
- Ohne das Entpacken der Nutzlast liefert Pub/Sub ein JSON-Objekt, das mehrere Felder mit Nachrichtenmetadaten und ein Feld mit Nachrichtendaten enthält. In diesem Fall muss das JSON-Dokument geparst werden, um die Nachrichtendaten abzurufen, und dann base64-decodiert werden.
Metadaten schreiben
Nachdem Sie das Entpacken der Nutzlast aktiviert haben, können Sie die Option Metadaten schreiben verwenden. Dadurch werden zuvor entfernte Nachrichtenmetadaten in den Anfrageheader eingefügt.
- Metadaten schreiben aktiviert Fügen Sie dem Anfrageheader wieder Nachrichtenmetadaten hinzu. Sendet auch die decodierten Rohdaten der Nachricht.
- Metadaten schreiben deaktiviert. Sendet nur die decodierten Rohdaten der Nachricht.
Schreibmetadaten werden über Pub/Sub, das Google Cloud CLI-Argument --push-no-wrapper-write-metadata
und die API-Eigenschaft NoWrapper
verfügbar gemacht.
Standardmäßig ist dieser Wert „null“.
Hinweise
- Weitere Informationen zu Pub/Sub-Abos und Push-Abos Das Entpacken der Nutzlast kann nur mit Push-Abos verwendet werden.
- Informationen zum Konfigurieren eines Push-Abos
Beispiel für umhüllte und nicht umhüllte Nachrichten
Die folgenden Beispiele veranschaulichen den Unterschied zwischen dem Senden einer umhüllten und einer nicht umhüllten HTTP-Nachricht. In diesen Beispielen enthalten die Nachrichtendaten den String {"status": "Hello there"}
.
In diesem Beispiel wird ein Abo mit aktivierter Funktion zum Entpacken der Nutzlast erstellt und eine Nachricht für mytopic
veröffentlicht. Es wird ein Sortierschlüssel mit dem Wert some-key
verwendet und der Medientyp wird als application/json
deklariert.
gcloud pubsub topics publish mytopic --message='{"status": "Hello there"}' --ordering-key="some-key" --attribute "Content-Type=application/json"
In den folgenden Abschnitten wird der Unterschied zwischen einer umschlossenen und einer nicht umschlossenen Nachricht veranschaulicht.
Umgebrochene Nachricht
Das folgende Beispiel zeigt eine standardmäßige in Pub/Sub verpackte Nachricht. In diesem Fall ist das Entpacken der Nutzlast nicht aktiviert.
Veröffentlichen | Empfang von Push-Endpunkten |
---|---|
data="{"status": "Hello there"}" ordering_key="some-key" attributes= { {"Content-Type", "application/json"} } |
Content-Length: 361 Content-Type: application/json User-Agent: CloudPubSub-Google Host: subscription-project.uc.r.appspot.com { "message": { "attributes": { "Content-Type": "application/json" }, "data": "eyJzdGF0dXMiOiAiSGVsbG8gdGhlcmUifQ==", // Base64 - {"status": "Hello there"} "messageId": "2070443601311540", "message_id": "2070443601311540", "publishTime": "2021-02-26T19:13:55.749Z", "publish_time": "2021-02-26T19:13:55.749Z" }, "subscription": "projects/myproject/..." } |
Entpackte Nachricht mit deaktiviertem Schreiben von Metadaten
Das folgende Beispiel zeigt eine nicht umschlossene Nachricht, bei der die Option zum Schreiben von Metadaten deaktiviert ist. In diesem Fall sind die x-goog-pubsub-*
-Header und Nachrichtenattribute nicht enthalten.
Veröffentlichen | Empfang von Push-Endpunkten |
---|---|
data="{"status": "Hello there"}" ordering_key="some-key" attributes= { {"Content-Type", "application/json"} } |
Content-Length: 25 User-Agent: CloudPubSub-Google Host: subscription-project.uc.r.appspot.com {"status": "Hello there"} |
Entpackte Nachricht mit aktivierter Funktion zum Schreiben von Metadaten
Das folgende Beispiel zeigt eine nicht umschlossene Nachricht, bei der die Option zum Schreiben von Metadaten aktiviert ist. In diesem Fall sind die x-goog-pubsub-*
-Header und Nachrichtenattribute enthalten.
Veröffentlichen | Empfang von Push-Endpunkten |
---|---|
data="{"status": "Hello there"}" ordering_key="some-key" attributes= { {"Content-Type", "application/json"} } |
x-goog-pubsub-subscription-name: "projects/myproject/..." x-goog-pubsub-message-id: "2070443601311540" x-goog-pubsub-publish-time: "2021-02-26T19:13:55.749Z" x-goog-pubsub-ordering-key: "some-key" Content-Type: application/json Content-Length: 12 User-Agent: CloudPubSub-Google Host: subscription-project.uc.r.appspot.com {"status": "Hello there"} |
Entpacken der Nutzlast konfigurieren
Sie können die Push-Zustellung mit Entschlüsselung der Nutzlast für ein Abo über die Seite Abo-Details in der Trusted Cloud -Konsole, die Google Cloud CLI oder die Clientbibliotheken aktivieren.
Console
Rufen Sie in der Trusted Cloud Console die Seite Abos auf.
Klicken Sie auf Abo erstellen.
Geben Sie im Feld Abo-ID einen Namen ein.
Informationen zum Benennen eines Abos finden Sie unter Richtlinien für die Benennung eines Themas oder Abos.
Wählen Sie im Drop-down-Menü ein Thema aus. Das Abo erhält Nachrichten aus dem Thema.
Wählen Sie als Zustellungstyp Push aus.
Wenn Sie das Entpacken der Nutzlast aktivieren möchten, wählen Sie Entpacken der Nutzlast aktivieren aus.
Optional: Wenn Sie die Metadaten von Nachrichten im Anfrageheader beibehalten möchten, wählen Sie Metadaten schreiben aus. Sie müssen diese Option aktivieren, um einen Content-Type-Header für Ihre Nachrichten festzulegen.
Geben Sie eine Endpunkt-URL an.
Behalten Sie alle anderen Standardwerte bei.
Klicken Sie auf Erstellen.
gcloud
Führen Sie den folgenden gcloud pubsub subscriptions create
-Befehl aus, um ein Abo mit Nutzlastentpackung zu konfigurieren, das Standard-HTTP-Header enthält:
gcloud pubsub subscriptions create SUBSCRIPTION \ --topic TOPIC \ --push-endpoint=PUSH_ENDPOINT \ --push-no-wrapper
Ersetzen Sie Folgendes:
SUBSCRIPTION
: der Name oder die ID Ihres Pull-Abos.TOPIC
: die ID des Themas.PUSH_ENDPOINT
: Die URL, die als Endpunkt für dieses Abo verwendet werden soll. z. B.https://myproject.appspot.com/myhandler
.--push-no-wrapper
: Die Nachrichtendaten werden direkt als HTTP-Textkörper bereitgestellt.
Führen Sie den folgenden Befehl aus, um ein Abo mit dem Entpacken der Nutzlast zu konfigurieren und die Verwendung von x-goog-pubsub-*
-Headern zu steuern:
gcloud pubsub subscriptions create SUBSCRIPTION \ --topic TOPIC \ --push-endpoint=PUSH_ENDPOINT \ --push-no-wrapper \ --push-no-wrapper-write-metadata
--push-no-wrapper-write-metadata
: Wenn „true“, werden die Pub/Sub-Nachrichtenmetadaten in diex-goog-pubsub-<KEY>:<VAL>
-Header der HTTP-Anfrage geschrieben. Schreibt die Attribute der Pub/Sub-Nachricht in die<KEY>:<VAL>
-Header der HTTP-Anfrage.
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 zu Pub/Sub Python 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 zu Pub/Sub Java API.
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.
Go
Im folgenden Beispiel wird die Hauptversion der Go Pub/Sub-Clientbibliothek (v2) verwendet. Wenn Sie noch die v1-Bibliothek verwenden, finden Sie hier den Migrationsleitfaden für v2. Eine Liste der Codebeispiele für Version 1 finden Sie unter Eingestellte Codebeispiele.
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 zu Pub/Sub Go 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 zu 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 zu Pub/Sub Node.js API.
Header für Inhaltstyp in der Nachricht festlegen
Nachdem Sie das Entpacken der Nutzlast aktiviert haben, legt Pub/Sub nicht automatisch ein Headerfeld für den Medientyp in Ihrer Anfrage fest. Wenn Sie kein Content-Type
-Headerfeld explizit festlegen, kann der Webserver, der Ihre Anfrage verarbeitet, einen Standardwert von application/octet-stream
festlegen oder die Anfrage auf unerwartete Weise interpretieren.
Wenn Sie einen Content-Type
-Header benötigen, müssen Sie ihn beim Veröffentlichen jeder einzelnen veröffentlichten Nachricht explizit deklarieren. Dazu müssen Sie zuerst Metadaten schreiben aktivieren. Das Ergebnis der Aktivierung von Metadaten schreiben ist in den bereitgestellten Beispielen zu sehen.
Nächste Schritte
- Wenn Sie Probleme beim Entpacken der Nutzlast haben, lesen Sie den Abschnitt Fehlerbehebung beim Entpacken der Nutzlast.