Este documento fornece informações sobre a publicação de mensagens.
Uma aplicação de publicador cria e envia mensagens para um tópico. O Pub/Sub oferece o fornecimento de mensagens, pelo menos, uma vez e a ordenação de melhor esforço aos subscritores existentes.
O fluxo geral de uma candidatura de publicador é o seguinte:
- Crie uma mensagem com os seus dados.
- Enviar um pedido ao servidor Pub/Sub para publicar a mensagem no tópico especificado.
Antes de começar
Antes de configurar o fluxo de trabalho de publicação, certifique-se de que concluiu as seguintes tarefas:
- Saiba mais acerca do fluxo de trabalho de publicação.
- Crie um tópico.
- Escolha e crie uma subscrição.
Funções necessárias
Para receber as autorizações de que
precisa para publicar mensagens num tópico,
peça ao seu administrador para lhe conceder a
função de IAM Publicador do Pub/Sub (roles/pubsub.publisher
)
no tópico.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Precisa de autorizações adicionais para criar ou atualizar tópicos e subscrições.
Formato da mensagem
Uma mensagem consiste em campos com os dados e os metadados da mensagem. Especifique, pelo menos, uma das seguintes opções na mensagem:
- Os dados da mensagem
- Uma chave de ordenação
- Atributos com metadados adicionais
O serviço Pub/Sub adiciona os seguintes campos à mensagem:
- Um ID da mensagem exclusivo do tópico
- Uma data/hora de quando o serviço Pub/Sub recebe a mensagem
Para saber mais sobre as mensagens, consulte o artigo Formato de mensagem.
Publique mensagens
Pode publicar mensagens com a Google Cloud consola, a CLI do Google Cloud, a API Pub/Sub e as bibliotecas cliente. As bibliotecas de cliente podem publicar mensagens de forma assíncrona.
Os exemplos seguintes demonstram como publicar uma mensagem num tópico.
Consola
Para publicar uma mensagem, siga estes passos:
Na Google Cloud consola, aceda à página Tópicos do Pub/Sub.
Clique no ID do tópico.
Na página Detalhes do tópico em Mensagens, clique em Publicar mensagem.
No campo Corpo da mensagem, introduza os dados da mensagem.
Clique em Publicar.
gcloud
Para publicar uma mensagem, use o comando gcloud pubsub topics publish:
gcloud pubsub topics publish TOPIC_ID \ --message=MESSAGE_DATA \ [--attribute=KEY="VALUE",...]
Substitua o seguinte:
- TOPIC_ID: o ID do tópico
- MESSAGE_DATA: uma string com os dados da mensagem
- KEY: a chave de um atributo de mensagem
- VALUE: o valor da chave do atributo da mensagem
REST
Para publicar uma mensagem, envie um pedido POST semelhante ao seguinte:
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish Content-Type: application/json Authorization: Bearer $(gcloud auth application-default print-access-token)
Substitua o seguinte:
- PROJECT_ID: o ID do projeto do projeto com o tópico
- TOPIC_ID: o ID do tópico
Especifique os seguintes campos no corpo do pedido:
{ "messages": [ { "attributes": { "KEY": "VALUE", ... }, "data": "MESSAGE_DATA", } ] }
Substitua o seguinte:
- KEY: a chave de um atributo de mensagem
- VALUE: o valor da chave do atributo da mensagem
- MESSAGE_DATA: uma string codificada em base64 com os dados da mensagem
A mensagem tem de conter um campo de dados não vazio ou, pelo menos, um atributo.
Se o pedido for bem-sucedido, a resposta é um objeto JSON com o ID da mensagem. O exemplo seguinte é uma resposta com um ID de mensagem:
{ "messageIds": [ "19916711285", ] }
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.
C#
Antes de experimentar este exemplo, siga as instruções de configuração do C# em 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.
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.
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.
PHP
Antes de experimentar este exemplo, siga as instruções de configuração do PHP no artigo Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API PHP Pub/Sub.
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.
Ruby
O exemplo seguinte usa a biblioteca cliente Ruby Pub/Sub v3. Se ainda estiver a usar a biblioteca v2, consulte o guia de migração para a v3. Para ver uma lista de exemplos de código do Ruby v2, consulte os exemplos de código descontinuados.
Antes de experimentar este exemplo, siga as instruções de configuração do Ruby em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Ruby Pub/Sub.
Depois de publicar uma mensagem, o serviço Pub/Sub devolve o ID da mensagem ao publicador.
Use atributos para publicar uma mensagem
Pode incorporar atributos personalizados como metadados em mensagens do Pub/Sub. Os atributos são usados para fornecer informações adicionais sobre a mensagem, como a respetiva prioridade, origem ou destino. Também é possível usar atributos para filtrar mensagens na subscrição.
Siga estas diretrizes para usar atributos nas suas mensagens:
Os atributos podem ser strings de texto ou strings de bytes.
Pode ter, no máximo, 100 atributos por mensagem.
As chaves de atributos não podem começar com
goog
e não podem exceder 256 bytes.Os valores dos atributos não podem exceder 1024 bytes.
O esquema de mensagens pode ser representado da seguinte forma:
{ "data": string, "attributes": { string: string, ... }, "messageId": string, "publishTime": string, "orderingKey": string }
No caso de duplicados do lado da publicação, é possível ver valores publishTime
diferentes para a mesma mensagem original do lado do cliente, mesmo com o mesmo messageId
.
O esquema JSON PubsubMessage
é publicado como parte da documentação
REST e
RPC. Pode usar atributos personalizados para as datas/horas dos eventos.
Os exemplos seguintes demonstram como publicar uma mensagem com atributos num tópico.
Consola
Para publicar uma mensagem com atributos, siga estes passos:
Na Google Cloud consola, aceda à página Tópicos.
Clique no tópico para o qual quer publicar mensagens.
Na página de detalhes do tópico, clique em Mensagens.
Clique em Publicar mensagem.
No campo Corpo da mensagem, introduza os dados da mensagem.
Em Atributos de mensagens, clique em Adicionar um atributo.
Introduza um par de chave-valor.
Adicione mais atributos, se necessário.
Clique em Publicar.
gcloud
gcloud pubsub topics publish my-topic --message="hello" \ --attribute="origin=gcloud-sample,username=gcp,eventTime='2021-01-01T12:00:00Z'"
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.
C#
Antes de experimentar este exemplo, siga as instruções de configuração do C# em 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.
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.
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.
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.
Ruby
O exemplo seguinte usa a biblioteca cliente Ruby Pub/Sub v3. Se ainda estiver a usar a biblioteca v2, consulte o guia de migração para a v3. Para ver uma lista de exemplos de código do Ruby v2, consulte os exemplos de código descontinuados.
Antes de experimentar este exemplo, siga as instruções de configuração do Ruby em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Ruby Pub/Sub.
Use as teclas de ordenação para publicar uma mensagem
Para receber mensagens por ordem nos clientes subscritores, tem de configurar os clientes publicadores para publicarem mensagens com chaves de ordenação.
Para compreender o conceito de ordenação de chaves, consulte o artigo Ordene mensagens.
Segue-se uma lista de considerações importantes para a ordenação de mensagens para clientes de publicadores:
Ordenação num único cliente publicador: quando um único cliente publicador publica mensagens com a mesma chave de ordenação na mesma região, o cliente subscritor recebe essas mensagens na ordem exata em que foram publicadas. Por exemplo, se um cliente publicador publicar as mensagens 1, 2 e 3 com a chave de ordenação A, o cliente subscritor recebe-as pela ordem 1, 2 e 3.
Ordenação em vários clientes publicadores: a ordem das mensagens recebidas pelos clientes subscritores é consistente com a ordem em que foram publicadas na mesma região, mesmo quando vários clientes publicadores usam a mesma chave de ordenação. No entanto, os próprios clientes publicadores não têm conhecimento desta encomenda.
Por exemplo, se os clientes publicadores X e Y publicarem mensagens com a chave de ordenação A, e a mensagem de X for recebida pelo Pub/Sub antes da mensagem de Y, todos os clientes subscritores recebem a mensagem de X antes da mensagem de Y. Se for necessária uma ordem rigorosa das mensagens em diferentes clientes publicadores, esses clientes têm de implementar um mecanismo de coordenação adicional para garantir que não publicam mensagens com a mesma chave de ordenação em simultâneo. Por exemplo, pode usar um serviço de bloqueio para manter a propriedade de uma chave de ordenação durante a publicação.
Encomendar em várias regiões: a garantia de entrega ordenada só se aplica quando as publicações de uma chave de ordenação estão na mesma região. Se a sua aplicação de publicador publicar mensagens com a mesma chave de ordenação em diferentes regiões, não é possível aplicar a ordem nessas publicações. Os subscritores podem estabelecer ligação a qualquer região, e a garantia de ordenação é mantida.
Quando executa a sua aplicação no Google Cloud, por predefinição, esta liga-se ao ponto final do Pub/Sub na mesma região. Por conseguinte, executar a sua aplicação numa única região dentro de Google Cloud geralmente garante que está a interagir com uma única região.
Quando executa a sua aplicação de publicador fora deGoogle Cloud ou em várias regiões, pode garantir que está a estabelecer ligação a uma única região através de um ponto final de localização quando configura o seu cliente do Pub/Sub. Todos os pontos finais de localização do Pub/Sub apontam para regiões únicas. Para saber mais acerca dos pontos finais de localização, consulte os pontos finais do Pub/Sub. Para ver uma lista de todos os pontos finais de localização do Pub/Sub, consulte o artigo Lista de pontos finais de localização.
Falhas na publicação: quando a publicação com uma chave de ordenação falha, as mensagens em fila com a mesma chave de ordenação na publicação falham, incluindo pedidos de publicação futuros desta chave de ordenação. Tem de retomar a publicação com chaves de ordenação quando ocorrem essas falhas. Para ver um exemplo de como retomar a operação de publicação, consulte Volte a tentar pedidos com chaves de ordenação.
Pode publicar mensagens com chaves de ordenação através da Google Cloud consola, da CLI do Google Cloud, da API Pub/Sub ou das bibliotecas cliente.
Consola
Para publicar uma mensagem com atributos, siga estes passos:
Na Google Cloud consola, aceda à página Tópicos.
Clique no tópico para o qual quer publicar mensagens.
Na página de detalhes do tópico, clique em Mensagens.
Clique em Publicar mensagem.
No campo Corpo da mensagem, introduza os dados da mensagem.
No campo Ordem das mensagens, introduza uma chave de ordenação.
Clique em Publicar.
gcloud
Para publicar uma mensagem com uma chave de ordenação, use o comando
gcloud pubsub topics publish
e o sinalizador --ordering-key
:
gcloud pubsub topics publish TOPIC_ID \ --message=MESSAGE_DATA \ --ordering-key=ORDERING_KEY
Substitua o seguinte:
- TOPIC_ID: o ID do tópico
- MESSAGE_DATA: uma string com os dados da mensagem
- ORDERING_KEY: uma string com uma chave de ordenação
REST
Para publicar uma mensagem com uma chave de ordenação, envie um pedido POST como o seguinte:
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish Content-Type: application/json Authorization: Bearer $(gcloud auth application-default print-access-token)
Substitua o seguinte:
- PROJECT_ID: o ID do projeto do projeto com o tópico
- TOPIC_ID: o ID do tópico
Especifique os seguintes campos no corpo do pedido:
{ "messages": [ { "attributes": { "KEY": "VALUE", ... }, "data": "MESSAGE_DATA", "ordering_key": "ORDERING_KEY", } ] }
Substitua o seguinte:
- KEY: a chave de um atributo de mensagem
- VALUE: o valor da chave do atributo da mensagem
- MESSAGE_DATA: uma string codificada em base64 com os dados da mensagem
- ORDERING_KEY: uma string com uma chave de ordenação
A mensagem tem de conter um campo de dados não vazio ou, pelo menos, um atributo.
Se o pedido for bem-sucedido, a resposta é um objeto JSON com o ID da mensagem. O exemplo seguinte é uma resposta com um ID de mensagem:
{ "messageIds": [ "19916711285", ] }
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.
C#
Antes de experimentar este exemplo, siga as instruções de configuração do C# em 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.
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.
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.
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.
Ruby
O exemplo seguinte usa a biblioteca cliente Ruby Pub/Sub v3. Se ainda estiver a usar a biblioteca v2, consulte o guia de migração para a v3. Para ver uma lista de exemplos de código do Ruby v2, consulte os exemplos de código descontinuados.
Antes de experimentar este exemplo, siga as instruções de configuração do Ruby em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Ruby Pub/Sub.
Monitorize um publicador
O Cloud Monitoring oferece várias métricas para monitorizar tópicos.
Para monitorizar um tópico e manter um publicador em boas condições, consulte o artigo Mantenha um publicador em boas condições.
O que se segue?
Para restringir as localizações nas quais o Pub/Sub armazena dados de mensagens, consulte o artigo Restringir localizações de recursos do Pub/Sub.
Para publicar mensagens com esquema, consulte o artigo Vista geral do esquema.
Para saber como configurar opções de fornecimento avançadas, consulte o seguinte: