Quando crei il tuo sistema Pub/Sub, l'unwrapping del payload può aiutarti ti colleghi ad altri sistemi che non rispettano tutti i requisiti di sistema di una l'implementazione standard dell'endpoint push di Pub/Sub.
Di seguito sono riportati alcuni casi d'uso potenziali per l'annullamento del wrapping del payload:
- Non vuoi scrivere codice per l'analisi dei messaggi specifico per Pub/Sub per gli endpoint push HTTP.
- Preferisci ricevere i metadati dei messaggi Pub/Sub come intestazioni HTTP invece dei metadati nel corpo HTTP POST.
- Vuoi inviare messaggi Pub/Sub ed escludere i metadati Pub/Sub, ad esempio durante l'invio di dati a un tramite un'API di terze parti.
Come funziona l'annullamento del wrapping del payload
L'annullamento del wrapping del payload è una funzionalità che rimuove Pub/Sub messaggi di tutti i metadati dei messaggi, ad eccezione dei dati dei messaggi. Inviando i file non elaborati i dati dei messaggi, i sottoscrittori possono elaborarli senza dover a qualsiasi requisito di sistema di Pub/Sub.
- Con lo scollegamento del payload, i dati del messaggio vengono inviati direttamente come corpo HTTP.
- Senza l'annullamento del wrapping del payload, Pub/Sub invia un oggetto JSON che contiene più campi di metadati dei messaggi e un campo di dati dei messaggi. In questo caso, il JSON deve essere analizzato per recuperare i dati del messaggio e quindi in base64 decodificato.
Scrivere metadati
Dopo aver abilitato l'annullamento del wrapping del payload, puoi utilizzare l'opzione write metadata (scrivi metadati), che aggiunge i metadati del messaggio rimossi in precedenza nell'intestazione della richiesta.
- Scrittura metadati abilitata. Aggiungi di nuovo i metadati del messaggio alla richiesta intestazione. Fornisce anche i dati dei messaggi non elaborati e decodificati.
- Scrittura metadati disabilitata. Invia solo i dati dei messaggi non elaborati e decodificati.
I metadati di scrittura vengono esposti tramite Pub/Sub, Google Cloud CLI
l'argomento --push-no-wrapper-write-metadata
e la proprietà API NoWrapper
.
Per impostazione predefinita, questo valore è nullo.
Prima di iniziare
- Scopri di più sulle iscrizioni Pub/Sub e sottoscrizioni push. L'annullamento del wrapping del payload può essere utilizzato solo con le iscrizioni push.
- Scopri come configurare una sottoscrizione push.
Esempio di messaggi con wrapping e unwrapping
I seguenti esempi illustrano la differenza tra l'invio di un
messaggio HTTP con wrapping e unwrapping. In questi esempi, i dati dei messaggi contengono
la stringa {"status": "Hello there"}
.
Per questo esempio, viene creata una sottoscrizione con l'annullamento del wrapping del payload
attivata e pubblica un messaggio su mytopic
. Utilizza un sistema di ordinamento
chiave con valore some-key
e il tipo di media è dichiarato come
application/json
.
gcloud pubsub topics publish mytopic --message='{"status": "Hello there"}' --ordering-key="some-key" --attribute "Content-Type=application/json"
Le seguenti sezioni mostrano la differenza tra un wrapping e un senza wrapper per creare un nuovo messaggio email.
Messaggio con wrapping
L'esempio seguente mostra un messaggio con wrapping Pub/Sub standard. Nella In questo caso, l'unwrapping del payload non è abilitato.
Pubblica | Riceve endpoint push |
---|---|
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/..." } |
Messaggio con wrapping con metadati di scrittura disabilitati
L'esempio seguente mostra un messaggio non analizzato con l'opzione di scrittura dei metadati disabilitata. In questo caso, le intestazioni x-goog-pubsub-*
e gli attributi del messaggio
non sono incluse.
Pubblica | Riceve endpoint push |
---|---|
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"} |
Messaggio senza wrapping con metadati di scrittura abilitati
L'esempio seguente mostra un messaggio senza wrapping con l'opzione Scrivi metadati
in un bucket in cui è abilitato
il controllo delle versioni. In questo caso, sono inclusi gli attributi x-goog-pubsub-*
e gli attributi dei messaggi.
Pubblica | Riceve endpoint push |
---|---|
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"} |
Configura l'annullamento del wrapping del payload
Puoi abilitare la consegna push dell'annullamento del wrapping del payload per una sottoscrizione utilizzando la pagina Dettagli abbonamento della console Google Cloud, Google Cloud CLI o le librerie client.
Console
Nella console Google Cloud, vai alla pagina Abbonamenti.
Fai clic su Crea sottoscrizione.
Nel campo ID abbonamento, inserisci un nome.
Per informazioni su come assegnare un nome a una sottoscrizione, vedi Linee guida per assegnare un nome a un argomento o a una sottoscrizione.
Seleziona un argomento dal menu a discesa. La sottoscrizione riceve messaggi dall'argomento.
Per Tipo di pubblicazione, seleziona Push.
Per attivare l'annullamento del wrapping del payload, seleziona Abilita l'annullamento del wrapping del payload.
(Facoltativo) Per conservare i metadati dei messaggi nell'intestazione della richiesta: Seleziona Scrivi metadati. Devi attivare questa opzione per impostare un'intestazione Content-Type per i tuoi messaggi.
Specifica un URL endpoint.
Conserva tutti gli altri valori predefiniti.
Fai clic su Crea.
gcloud
Per configurare una sottoscrizione con l'annullamento del wrapping del payload che include il
Intestazioni HTTP, esegui questo comando gcloud pubsub subscriptions create
:
gcloud pubsub subscriptions create SUBSCRIPTION \ --topic TOPIC \ --push-endpoint=PUSH_ENDPOINT \ --push-no-wrapper
Sostituisci quanto segue:
SUBSCRIPTION
: il nome o l'ID della tua sottoscrizione pull.TOPIC
: l'ID dell'argomento.PUSH_ENDPOINT
: l'URL da utilizzare come endpoint per questo abbonamento. Ad esempio,https://myproject.appspot.com/myhandler
--push-no-wrapper
: consegna i dati del messaggio direttamente come corpo HTTP.
Per configurare un abbonamento con scomposizione del payload e controllare l'utilizzo degli intestazioni x-goog-pubsub-*
, esegui il seguente comando:
gcloud pubsub subscriptions create SUBSCRIPTION \ --topic TOPIC \ --push-endpoint=PUSH_ENDPOINT \ --push-no-wrapper \ --push-no-wrapper-write-metadata
--push-no-wrapper-write-metadata
: se true, scrive i metadati dei messaggi Pub/Sub nelle intestazionix-goog-pubsub-<KEY>:<VAL>
della richiesta HTTP. Scrive il messaggio Pub/Sub alle intestazioni<KEY>:<VAL>
della richiesta HTTP.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Python.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
C++
Prima di provare questo esempio, segui le istruzioni di configurazione C++ riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js Pub/Sub.
Imposta un'intestazione per tipo di contenuti nel messaggio
Dopo aver attivato lo scollegamento del payload, Pub/Sub non imposta automaticamente un campo dell'intestazione del tipo di media nella richiesta. Se
non imposti esplicitamente un campo dell'intestazione Content-Type
, il server web
che elabora la tua richiesta potrebbe impostare un valore predefinito di
application/octet-stream
o interpretare la richiesta in modo imprevisto.
Se hai bisogno di un'intestazione Content-Type
, assicurati di dichiararla esplicitamente al momento della pubblicazione per ogni singolo messaggio pubblicato. Per farlo, devi
abilita Scrivi metadati. Questo risultato dell'abilitazione di Scrivi metadati
è mostrato negli esempi forniti.
Passaggi successivi
- Se hai problemi con l'annullamento del wrapping del payload, vedi Risolvere i problemi relativi all'annullamento del wrapping del payload.