Beim Erstellen Ihres Pub/Sub-Systems kann das Entpacken der Nutzlast helfen die Sie mit anderen Systemen verbinden, die nicht alle Systemanforderungen eines Standardimplementierung von Pub/Sub-Push-Endpunkten.
Im Folgenden sind einige potenzielle Anwendungsfälle für das Entpacken der Nutzlast aufgeführt:
- Sie möchten keinen Pub/Sub-spezifischen Code zum Parsen von Nachrichten für Ihre HTTP-Push-Endpunkte schreiben.
- Sie bevorzugen den Empfang von Pub/Sub-Nachrichtenmetadaten als HTTP-Header. anstelle der Metadaten im HTTP-POST-Textkörper.
- 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, das Pub/Sub entfernt. Nachrichten aller Metadaten der Nachricht mit Ausnahme der Nachrichtendaten. Wenn Sie rohe Nachrichtendaten 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, enthält mehrere Metadatenfelder für die Nachricht und ein Nachrichtendatenfeld. In diesem Fall muss die JSON-Datei geparst werden, um die Nachrichtendaten abzurufen, und dann base64-decodiert werden.
Metadaten schreiben
Nach dem Aktivieren des Entpackens der Nutzlast können Sie die Option Metadaten schreiben verwenden, fügt zuvor entfernte Nachrichtenmetadaten dem Anfrageheader hinzu.
- Metadaten schreiben muss aktiviert sein. Fügen Sie die Nachrichtenmetadaten wieder dem Anfrageheader hinzu. Sendet außerdem die decodierten Rohdaten der Nachricht.
- Schreibmetadaten deaktiviert. Sendet nur die decodierten Rohdaten der Nachricht.
Schreibmetadaten werden über Pub/Sub, die Google Cloud CLI bereitgestellt
Argument --push-no-wrapper-write-metadata
und die API-Property NoWrapper
.
Standardmäßig ist dieser Wert null.
Hinweise
- Erfahren Sie mehr über 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 erstellt, bei dem die Funktion zum Entfernen des Nutzlast-Wrappers aktiviert ist, und eine Nachricht wird an mytopic
veröffentlicht. Dabei wird eine Sortierung
Schlüssel mit dem Wert some-key
und der Medientyp ist deklariert als
application/json
.
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 zusammengefassten und nicht umgebrochenen Texten dargestellt. .
Umgebrochene Nachricht
Das folgende Beispiel zeigt eine standardmäßige Pub/Sub-nachricht. In In diesem Fall ist das Entpacken von Payloading 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/..." } |
Unumschlossene 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 werden die x-goog-pubsub-*
-Header und Nachrichtenattribute
enthalten sind.
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 das Entpacken von Nutzlasten und Push-Zustellung für ein Abo aktivieren über die Seite Abodetails der Google Cloud Console, die Google Cloud CLI, oder die Client-Bibliotheken.
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 die Option Push aus.
Um das Entpacken der Nutzlast zu aktivieren, wählen Sie Entpacken der Nutzlast aktivieren aus.
Optional: Um die Metadaten von Nachrichten im Anfrageheader beizubehalten, wählen Sie Metadaten schreiben aus. Sie müssen diese Option aktivieren, um einen Content-Type-Header festzulegen. für Ihre Nachrichten.
Geben Sie eine Endpunkt-URL an.
Behalten Sie alle anderen Standardwerte bei.
Klicken Sie auf Erstellen.
gcloud
Um ein Abo mit Entpacken der Nutzlast zu konfigurieren, das Standard
HTTP-Header, führen Sie den folgenden gcloud pubsub subscriptions create
aus
Befehl:
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 verwendet werden soll Abo. z. B.https://myproject.appspot.com/myhandler
.--push-no-wrapper
: Sendet die Nachrichtendaten direkt als HTTP-Text.
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 das Entpacken der Nutzlast aktiviert ist,
automatisch ein Medientyp-Header-Feld in Ihrer Anfrage festlegen. Wenn Sie
Content-Type
-Header-Feld nicht explizit festlegen,
kann durch die Verarbeitung Ihrer Anfrage der Standardwert
application/octet-stream
oder die Anfrage auf unerwartete Weise interpretieren.
Wenn ein Content-Type
-Header erforderlich ist, müssen Sie ihn explizit deklarieren
Veröffentlichungszeitpunkt für jede einzelne
veröffentlichte Nachricht an. Dazu müssen Sie
aktivieren Sie zuerst Metadaten schreiben. Die Auswirkungen der Aktivierung von Metadaten schreiben sind in den vorgestellten Beispielen zu sehen.
Nächste Schritte
- Wenn Sie Probleme beim Entpacken der Nutzlast haben, lesen Sie den Abschnitt Fehlerbehebung beim Entpacken der Nutzlast.