Beim Erstellen Ihres Pub/Sub-Systems kann das Entpacken der Nutzlast dazu beitragen, 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 Entfernen des Nutzlast-Wrappers:
- 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 statt als Metadaten im HTTP-POST-Text erhalten.
- 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 eine Funktion, mit der alle Metadaten aus Pub/Sub-Nachrichten entfernt werden, mit Ausnahme der Nachrichtendaten. Wenn Sie Rohnachrichtendaten senden, können Abonnenten die Nachricht verarbeiten, ohne die Systemanforderungen von Pub/Sub einhalten zu müssen.
- Beim Entfernen des Nutzlast-Wrappers werden die Nachrichtendaten direkt als HTTP-Textkörper gesendet.
- Ohne Entpacken der Nutzlast liefert Pub/Sub ein JSON-Objekt mit mehreren Nachrichtenmetadatenfeldern und einem Nachrichtendatenfeld. In diesem Fall muss das JSON-Objekt 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 muss aktiviert sein. Fügen Sie die Nachrichtenmetadaten wieder dem Anfrageheader 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
bereitgestellt.
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.
- Weitere Informationen zum Konfigurieren eines Push-Abos
Beispiel für gewickelte und ungewickelte Nachrichten
Die folgenden Beispiele veranschaulichen den Unterschied zwischen dem Senden einer verpackten und einer unverpackten HTTP-Nachricht. In diesen Beispielen enthalten die Nachrichtendaten den String {"status": "Hello there"}
.
In diesem Beispiel wird ein Abo mit aktivierter Funktion zum Entfernen der Nutzlast erstellt und eine Nachricht an mytopic
veröffentlicht. Es wird ein Sortierfeld mit dem Wert some-key
verwendet und der Medientyp ist 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 veranschaulicht.
Umgebrochene Nachricht
Das folgende Beispiel zeigt eine standardmäßige Pub/Sub-nachricht. In diesem Fall ist das Entfernen 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 die 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 aktivierten Metadaten zum Schreiben
Das folgende Beispiel zeigt eine entpackte Nachricht, für die die Option zum Schreiben von Metadaten aktiviert ist. In diesem Fall sind die x-goog-pubsub-*
-Header und die 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 die Push-Zustellung mit Entfernen der Nutzlast für ein Abo auf der Seite Abodetails in der Google Cloud Console, über die Google Cloud CLI oder die Clientbibliotheken aktivieren.
Console
Öffnen Sie in der Google Cloud Console die Seite Abos.
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 als Zustellungstyp Push aus.
Wenn Sie das Entpacken der Nutzlast aktivieren möchten, wählen Sie Entpacken der Nutzlast aktivieren aus.
Optional: Wenn die Metadaten von Nachrichten im Anfrageheader beibehalten werden sollen, 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
Wenn du ein Abo mit Entfernen der Nutzlast mit Standard-HTTP-Headern konfigurieren möchtest, führe den folgenden gcloud pubsub subscriptions create
-Befehl aus:
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 gesendet.
Führen Sie den folgenden Befehl aus, um ein Abo mit Entfernen 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 „wahr“ ist, 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 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
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.
Content-Type-Header in der Nachricht festlegen
Nachdem du das Entfernen der Nutzlast aktiviert hast, setzt Pub/Sub in deiner Anfrage nicht automatisch ein Header-Feld für den Medientyp. Wenn Sie kein Content-Type
-Header-Feld explizit festlegen, setzt der Webserver, der Ihre Anfrage verarbeitet, möglicherweise den Standardwert application/octet-stream
oder interpretiert die Anfrage auf unerwartete Weise.
Wenn Sie einen Content-Type
-Header benötigen, müssen Sie ihn bei der Veröffentlichung für jede einzelne veröffentlichte Nachricht explizit deklarieren. Dazu müssen Sie zuerst Metadaten schreiben aktivieren. Die Auswirkungen der Aktivierung von Metadaten schreiben sind in den vorgestellten Beispielen zu sehen.
Nächste Schritte
- Wenn beim Entfernen des Nutzlast-Wrappers Probleme auftreten, sieh dir den Hilfeartikel Fehlerbehebung beim Entfernen des Nutzlast-Wrappers an.