Quando crei il tuo sistema Pub/Sub, l'annullamento del wrapping del payload può aiutarti a connetterti ad altri sistemi che non rispettano tutti i requisiti di sistema di un'implementazione standard dell'endpoint push Pub/Sub.
Di seguito sono riportati alcuni potenziali casi d'uso per l'annullamento del wrapping del payload:
- Non vuoi scrivere codice di analisi dei messaggi specifico per Pub/Sub per i tuoi endpoint push HTTP.
- Preferisci ricevere i metadati dei messaggi Pub/Sub come intestazioni HTTP anziché i metadati nel corpo della richiesta HTTP POST.
- Vuoi inviare messaggi Pub/Sub ed escludere i metadati Pub/Sub, ad esempio quando invii dati a un'API di terze parti.
Come funziona l'annullamento del wrapping del payload
L'annullamento del wrapping del payload è una funzionalità che rimuove tutti i metadati dei messaggi Pub/Sub, ad eccezione dei dati dei messaggi. Inviando i dati dei messaggi non elaborati, i sottoscrittori possono elaborare il messaggio senza dover rispettare i requisiti di sistema di Pub/Sub.
- Con l'annullamento del wrapping del payload, i dati dei messaggi vengono inviati direttamente come corpo della richiesta 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 dei messaggi e poi decodificato in base64.
Scrivi metadati
Dopo aver abilitato l'annullamento del wrapping del payload, puoi utilizzare l'opzione Scrivi metadati che aggiunge i metadati dei messaggi rimossi in precedenza all'intestazione della richiesta.
- Scrivi metadati abilitati. Aggiungi di nuovo i metadati dei messaggi all'intestazione della richiesta. Invia anche i dati dei messaggi non elaborati e decodificati.
- Scrivi metadati disabilitati. Invia solo i dati dei messaggi non elaborati e decodificati.
La scrittura dei metadati è esposta tramite Pub/Sub, l'argomento --push-no-wrapper-write-metadata di Google Cloud CLI
e la proprietà API NoWrapper.
Per impostazione predefinita, questo valore è null.
Prima di iniziare
- Scopri di più sulle sottoscrizioni Pub/Sub e sulle sottoscrizioni push. L'annullamento del wrapping del payload può essere utilizzato solo con le sottoscrizioni push.
- Scopri come configurare una sottoscrizione push.
Esempio di messaggi con wrapping e senza wrapping
Gli esempi seguenti illustrano la differenza tra l'invio di un messaggio HTTP con wrapping e senza wrapping. In questi esempi, i dati dei messaggi contengono
la stringa {"status": "Hello there"}.
Per questo esempio, viene creata una sottoscrizione con la funzionalità di annullamento del wrapping del payload abilitata e viene pubblicato un messaggio in mytopic. Utilizza una chiave di ordinamento con un valore di some-key e il tipo di supporto è dichiarato come application/json.
gcloud pubsub topics publish mytopic
--message='{"status": "Hello there"}'
--ordering-key="some-key"
--attribute "Content-Type=application/json"
Le sezioni seguenti mostrano la differenza tra un messaggio con wrapping e senza wrapping.
Messaggio con wrapping
L'esempio seguente mostra un messaggio con wrapping Pub/Sub standard. In questo caso, l'annullamento del wrapping del payload non è abilitato.
| Pubblica | L'endpoint push riceve |
|---|---|
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 senza wrapping con scrittura dei metadati disabilitata
L'esempio seguente mostra un messaggio senza wrapping con l'opzione di scrittura dei metadati disabilitata. In questo caso, le intestazioni x-goog-pubsub-* e gli attributi dei messaggi
non sono inclusi.
| Pubblica | L'endpoint push riceve |
|---|---|
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 scrittura dei metadati abilitata
L'esempio seguente mostra un messaggio senza wrapping con l'opzione di scrittura dei metadati abilitata. In questo caso, le intestazioni x-goog-pubsub-* e gli attributi dei messaggi
sono inclusi.
| Pubblica | L'endpoint push riceve |
|---|---|
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 distribuzione push dell'annullamento del wrapping del payload per una sottoscrizione utilizzando la pagina Dettagli sottoscrizione della console, Google Cloud CLI, o le librerie client. Google Cloud
Console
Nella Google Cloud console, vai alla pagina Sottoscrizioni.
Fai clic su Crea sottoscrizione.
Nel campo ID sottoscrizione, inserisci un nome.
Per informazioni su come denominare una sottoscrizione, consulta le linee guida per la denominazione di un argomento o di una sottoscrizione.
Seleziona un argomento dal menu a discesa. La sottoscrizione riceve i messaggi dall'argomento.
In Tipo di consegna, seleziona Push.
Per abilitare 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 abilitare questa opzione per impostare un'intestazione Content-Type per i tuoi messaggi.
Specifica un URL dell'endpoint.
Mantieni tutti gli altri valori predefiniti.
Fai clic su Crea.
gcloud
Per configurare una sottoscrizione con l'annullamento del wrapping del payload che include le intestazioni HTTP standard, esegui il seguente gcloud pubsub subscriptions create
comando:
gcloud pubsub subscriptions create SUBSCRIPTION \ --topic TOPIC \ --push-endpoint=PUSH_ENDPOINT \ --push-no-wrapper
Sostituisci quanto segue:
SUBSCRIPTION: il nome o l'ID della sottoscrizione pull.TOPIC: l'ID dell'argomento.PUSH_ENDPOINT: l'URL da utilizzare come endpoint per questa sottoscrizione. Ad esempio,https://myproject.appspot.com/myhandler--push-no-wrapper: invia i dati dei messaggi direttamente come corpo della richiesta HTTP.
Per configurare una sottoscrizione con l'annullamento del wrapping del payload e controllare l'utilizzo delle 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 intestazioni della richiesta HTTP.x-goog-pubsub-<KEY>:<VAL>Scrive gli attributi dei messaggi Pub/Sub nelle intestazioni<KEY>:<VAL>della richiesta HTTP.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Python.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Java.
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C++ .
Go
L'esempio seguente utilizza la versione principale della libreria client Go Pub/Sub (v2). Se utilizzi ancora la libreria v1, consulta la guida alla migrazione alla v2. Per visualizzare un elenco di esempi di codice della versione 1, consulta gli esempi di codice deprecati.
Prima di provare questo esempio, segui le istruzioni di configurazione di Go in Guida rapida all'utilizzo delle librerie client. Per saperne di più, 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 saperne di più, 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 in guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Imposta un'intestazione Content-Type nel messaggio
Dopo aver abilitato l'annullamento del wrapping del payload, Pub/Sub non imposta automaticamente un campo di intestazione del tipo di supporto nella richiesta. Se non imposti esplicitamente un campo di intestazione Content-Type, il server web
che elabora la 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 di ogni singolo messaggio pubblicato. Per farlo, devi prima abilitare Scrivi metadati. Il risultato dell'abilitazione di Scrivi metadati
è mostrato negli esempi forniti.
Passaggi successivi
- Se hai problemi con l'annullamento del wrapping del payload, consulta Risolvere i problemi relativi all'annullamento del wrapping del payload.