Ao criar o seu sistema Pub/Sub, a anulação da união de payloads pode ajudar a estabelecer ligação a outros sistemas que não cumprem todos os requisitos do sistema de uma implementação de endpoint push do Pub/Sub padrão.
Seguem-se alguns potenciais exemplos de utilização da anulação da união da carga útil:
- Não quer escrever código de análise de mensagens específico do Pub/Sub para os seus pontos finais de envio HTTP.
- Prefere receber metadados de mensagens do Pub/Sub como cabeçalhos HTTP, em vez dos metadados no corpo do HTTP POST.
- Quer enviar mensagens do Pub/Sub e excluir os metadados do Pub/Sub, por exemplo, quando envia dados para uma API de terceiros.
Como funciona a anulação da união de payloads
A anulação da união da carga útil é uma funcionalidade que remove todos os metadados das mensagens do Pub/Sub, exceto os dados das mensagens. Ao enviar dados de mensagens não processados, os subscritores podem processar a mensagem sem terem de cumprir os requisitos do sistema do Pub/Sub.
- Com a anulação da união do payload, os dados da mensagem são entregues diretamente como o corpo HTTP.
- Sem a anulação da união do payload, o Pub/Sub envia um objeto JSON que contém vários campos de metadados de mensagens e um campo de dados de mensagens. Neste caso, o JSON tem de ser analisado para obter os dados da mensagem e, em seguida, descodificado em base64.
Escreva metadados
Depois de ativar a anulação da união da carga útil, pode usar a opção Escrever metadados, que adiciona metadados de mensagens removidos anteriormente ao cabeçalho do pedido.
- Escrita de metadados ativada. Adicione novamente os metadados da mensagem ao cabeçalho do pedido. Também fornece os dados de mensagens não processados e descodificados.
- Escrita de metadados desativada. Apenas envia os dados de mensagens não processados e descodificados.
Os metadados de gravação são expostos através do Pub/Sub, do argumento --push-no-wrapper-write-metadata
da CLI Google Cloud e da propriedade da API NoWrapper
.
Por predefinição, este valor é nulo.
Antes de começar
- Saiba mais sobre as subscrições do Pub/Sub e as subscrições push. A anulação da união do payload só pode ser usada com subscrições push.
- Saiba como configurar uma subscrição push.
Exemplo de mensagens com e sem wrapper
Os exemplos seguintes ilustram a diferença entre o envio de uma mensagem HTTP envolvida e não envolvida. Nestes exemplos, os dados da mensagem contêm a string {"status": "Hello there"}
.
Para este exemplo, é criada uma subscrição com a funcionalidade de desencapsulamento do payload ativada e é publicada uma mensagem em mytopic
. Usa uma chave de ordenação com um valor de some-key
e o tipo de suporte é declarado como application/json
.
gcloud pubsub topics publish mytopic --message='{"status": "Hello there"}' --ordering-key="some-key" --attribute "Content-Type=application/json"
As secções seguintes mostram a diferença entre uma mensagem com wrapper e sem wrapper.
Mensagem moldada
O exemplo seguinte mostra uma mensagem padrão do Pub/Sub envolvida. Neste caso, a anulação da união da carga útil não está ativada.
Publicar | O ponto final de envio push recebe |
---|---|
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/..." } |
Mensagem não processada com metadados de escrita desativados
O exemplo seguinte mostra uma mensagem não envolvida com a opção de metadados de escrita desativada. Neste caso, os cabeçalhos x-goog-pubsub-*
e os atributos das mensagens não estão incluídos.
Publicar | O ponto final de envio push recebe |
---|---|
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"} |
Mensagem não processada com metadados de escrita ativados
O exemplo seguinte mostra uma mensagem não processada com a opção de metadados de escrita ativada. Neste caso, os cabeçalhos x-goog-pubsub-*
e os atributos das mensagens
são incluídos.
Publicar | O ponto final de envio push recebe |
---|---|
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"} |
Configure a anulação da união do payload
Pode ativar o envio por push da desagregação de payloads para uma subscrição através da página Google Cloud Detalhes da subscriçãoda consola, da CLI do Google Cloud ou das bibliotecas de cliente.
Consola
Na Google Cloud consola, aceda à página Subscrições.
Clique em Criar subscrição.
No campo ID da subscrição, introduza um nome.
Para obter informações sobre como atribuir um nome a uma subscrição, consulte as diretrizes para atribuir um nome a um tópico ou a uma subscrição.
Selecione um tópico no menu pendente. A subscrição recebe mensagens do tópico.
Para Tipo de fornecimento, selecione Push.
Para ativar a anulação da união do payload, selecione Ativar anulação da união do payload.
(Opcional) Para preservar os metadados das mensagens no cabeçalho do pedido, selecione Escrever metadados. Tem de ativar esta opção para definir um cabeçalho Content-Type para as suas mensagens.
Especifique um URL do ponto final.
Mantenha todos os outros valores predefinidos.
Clique em Criar.
gcloud
Para configurar uma subscrição com a anulação da união de payloads que inclua cabeçalhos HTTP padrão, execute o seguinte comando gcloud pubsub subscriptions create
:
gcloud pubsub subscriptions create SUBSCRIPTION \ --topic TOPIC \ --push-endpoint=PUSH_ENDPOINT \ --push-no-wrapper
Substitua o seguinte:
SUBSCRIPTION
: o nome ou o ID da sua subscrição de obtenção.TOPIC
: o ID do tópico.PUSH_ENDPOINT
: o URL a usar como ponto final para esta subscrição. Por exemplo,https://myproject.appspot.com/myhandler
--push-no-wrapper
: envia os dados da mensagem diretamente como o corpo HTTP.
Para configurar uma subscrição com a anulação da união da carga útil e controlar a utilização de cabeçalhos x-goog-pubsub-*
, execute o seguinte 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
: quando é verdadeiro, escreve os metadados da mensagem do Pub/Sub nos cabeçalhos do pedido HTTP.x-goog-pubsub-<KEY>:<VAL>
Escreve os atributos da mensagem do Pub/Sub nos cabeçalhos<KEY>:<VAL>
do pedido HTTP.
Python
Antes de experimentar este exemplo, siga as instruções de configuração do Python em Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Python Pub/Sub.
Java
Antes de experimentar este exemplo, siga as instruções de configuração do Java no artigo Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Java do Pub/Sub.
C++
Antes de experimentar este exemplo, siga as instruções de configuração do C++ no artigo Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API C++ do Pub/Sub.
Ir
O exemplo seguinte usa a versão principal da biblioteca de cliente Go Pub/Sub (v2). Se ainda estiver a usar a biblioteca v1, consulte o guia de migração para a v2. Para ver uma lista de exemplos de código da v1, consulte os exemplos de código descontinuados.
Antes de experimentar este exemplo, siga as instruções de configuração do Go em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Go do Pub/Sub.
Node.js
Antes de experimentar este exemplo, siga as instruções de configuração do Node.js em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js do Pub/Sub.
Node.js
Antes de experimentar este exemplo, siga as instruções de configuração do Node.js em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js do Pub/Sub.
Defina um cabeçalho content-type na sua mensagem
Depois de ativar a desagregação da carga útil, o Pub/Sub não
define automaticamente um campo de cabeçalho do tipo de suporte no seu pedido. Se não definir explicitamente um campo de cabeçalho Content-Type
, o servidor Web que processa o seu pedido pode definir um valor predefinido de application/octet-stream
ou interpretar o pedido de uma forma inesperada.
Se precisar de um cabeçalho Content-Type
, certifique-se de que o declara explicitamente no momento da publicação para cada mensagem publicada individualmente. Para o fazer, tem de
ativar primeiro a opção Escrever metadados. Este resultado da ativação da opção Escrever metadados
é apresentado nos exemplos fornecidos.
O que se segue?
- Se tiver problemas com a anulação da união da carga útil, consulte o artigo Resolva problemas de anulação da união da carga útil.