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.
Einige mögliche Anwendungsfälle für das Entpacken der Nutzlast:
- 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-Textkörper empfangen.
- Sie möchten Pub/Sub-Nachrichten senden und die Pub/Sub-Metadaten ausschließen, z. B. beim Senden von Daten an eine Drittanbieter-API.
Funktionsweise des Entpackens der Nutzlast
Das Entpacken der Nutzlast ist eine Funktion, mit der alle Nachrichtenmetadaten aus Pub/Sub-Nachrichten entfernt werden, mit Ausnahme der Nachrichtendaten. Durch das Senden von Rohdaten der Nachricht können Abonnenten die Nachricht verarbeiten, ohne die Systemanforderungen von Pub/Sub erfüllen zu müssen.
- Beim Entpacken der Nutzlast werden die Nachrichtendaten direkt als HTTP-Textkörper gesendet.
- Ohne das Entpacken der Nutzlast liefert Pub/Sub ein JSON-Objekt, das mehrere Felder für Nachrichtenmetadaten und ein Feld für Nachrichtendaten enthält. In diesem Fall muss das JSON-Objekt geparst werden, um die Nachrichtendaten abzurufen und dann base64-decodiert zu werden.
Metadaten schreiben
Nachdem Sie das Entpacken der Nutzlast aktiviert haben, können Sie die Option Metadaten schreiben verwenden, mit der zuvor entfernte Nachrichtenmetadaten in den Anfrageheader eingefügt werden.
- Metadaten schreiben aktiviert Fügt dem Anfrageheader wieder Nachrichtenmetadaten hinzu. Sendet auch die decodierten Rohdaten der Nachricht.
- Metadaten schreiben deaktiviert Sendet nur die decodierten Rohdaten der Nachricht.
Das Schreiben von Metadaten wird über Pub/Sub, das Google Cloud CLI
Argument --push-no-wrapper-write-metadata, und die API-Property NoWrapper verfügbar gemacht.
Standardmäßig ist dieser Wert null.
Hinweis
- 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 verpackte und entpackte Nachrichten
Die folgenden Beispiele veranschaulichen den Unterschied zwischen dem Senden einer verpackten und einer entpackten 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 an mytopic gesendet. 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 verpackten und einer entpackten Nachricht erläutert.
Verpackte Nachricht
Das folgende Beispiel zeigt eine standardmäßige verpackte Pub/Sub-Nachricht. In diesem Fall ist das Entpacken der Nutzlast nicht aktiviert.
| Veröffentlichen | Push-Endpunkt empfängt |
|---|---|
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 entpackte 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 | Push-Endpunkt empfängt |
|---|---|
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 aktiviertem Schreiben von Metadaten
Das folgende Beispiel zeigt eine entpackte 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 | Push-Endpunkt empfängt |
|---|---|
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 das Entpacken der Nutzlast für ein Abo mit der Cloud de Confiance Console auf der Seite Abo-Details, mit der Google Cloud CLI oder mit den Clientbibliotheken aktivieren.
Console
Rufen Sie in der Cloud de Confiance Console die Abos Seite 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 empfängt Nachrichten aus dem Thema.
Wählen Sie unter Zustellungstyp die Option Push aus.
Wählen Sie Entpacken der Nutzlast aktivieren aus, um das Entpacken der Nutzlast zu aktivieren.
(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 Entpacken der Nutzlast zu konfigurieren, das standardmäßige
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. Beispiel:https://myproject.appspot.com/myhandler--push-no-wrapper: Sendet die Nachrichtendaten direkt als HTTP-Textkörper.
Führen Sie den folgenden Befehl aus, um ein Abo mit 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 Pub/Sub-Nachrichtenattribute 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 zur 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 zur 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 Pub/Sub C++ API-Referenzdokumentation.
Go
Im folgenden Beispiel wird die Hauptversion der Go Pub/Sub-Clientbibliothek (Version 2) verwendet. Wenn Sie noch die Version 1 verwenden, lesen Sie den Migrationsleitfaden zu Version 2. Eine Liste der Codebeispiele für Version 1 finden Sie unter Veraltete 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 zur Pub/Sub Go API.
Node.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Node.js 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 Node.js in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.
Content-Type-Header in Ihrer Nachricht festlegen
Nachdem Sie das Entpacken der Nutzlast aktiviert haben, legt Pub/Sub kein 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 explizit für jede veröffentlichte Nachricht deklarieren. Dazu müssen Sie zuerst Metadaten schreiben aktivieren. Das Ergebnis der Aktivierung von Metadaten schreiben
wird in den bereitgestellten Beispielen gezeigt.
Nächste Schritte
- Wenn Sie Probleme mit dem Entpacken der Nutzlast haben, lesen Sie den Abschnitt Fehlerbehebung beim Entpacken der Nutzlast.