Os subscritores podem não conseguir processar mensagens por vários motivos. Por exemplo, podem existir problemas transitórios na obtenção dos dados necessários para processar uma mensagem. Em alternativa, uma mensagem pode estar num formato que o subscritor não espera.
Para gerir mensagens com impossibilidade de entrega que os subscritores não conseguem acusar, o Pub/Sub pode encaminhá-las para um tópico de mensagens rejeitadas (também conhecido como uma fila de mensagens rejeitadas).
Antes de começar
Crie um tópico para a configuração do tópico de mensagens não entregues.
Em alternativa, se seguir todas as instruções nesta página do início ao fim, pode criar o tópico num passo subsequente.
Funções necessárias
Para receber as autorizações de que precisa para gerir tópicos e subscrições,
peça ao seu administrador para lhe conceder a função IAM de
editor do Pub/Sub (roles/pubsub.editor
)
no seu projeto.
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.
Pode configurar o controlo de acesso ao nível do projeto e ao nível do recurso individual. Pode criar uma subscrição num projeto e anexá-la a um tópico localizado num projeto diferente. Certifique-se de que tem as autorizações necessárias para cada projeto.
Como funcionam os tópicos de mensagens não entregues
Quando uma aplicação subscritora não consegue acusar a receção de uma mensagem, o Pub/Sub tenta novamente a entrega até que o prazo de acusação de receção seja cumprido ou a mensagem expire. Após um número de tentativas de entrega configurado aproximadamente, o Pub/Sub pode encaminhar a mensagem não entregável para um tópico de mensagens rejeitadas.
Quando o Pub/Sub encaminha uma mensagem não entregável, envolve a mensagem original numa nova e adiciona atributos que identificam a subscrição de origem. Em seguida, a mensagem é enviada para o tópico de mensagens rejeitadas especificado. Uma subscrição separada anexada ao tópico de mensagens não entregues pode, então, receber estas mensagens encaminhadas para análise e depuração offline.
Como são calculadas as tentativas de entrega máximas
O Pub/Sub só contabiliza as tentativas de entrega quando um tópico de mensagens não entregues está configurado corretamente e inclui as autorizações do IAM corretas.
O número máximo de tentativas de entrega é aproximado porque o Pub/Sub encaminha mensagens não entregáveis com base no melhor esforço. O serviço pode encaminhar uma mensagem após menos tentativas do que o configurado ou pode tentar a entrega mais algumas vezes antes do encaminhamento.
O número monitorizado de tentativas de entrega de uma mensagem também pode ser reposto para zero, especialmente para uma subscrição de obtenção com subscritores inativos. Como resultado, as mensagens podem ser entregues ao cliente subscritor mais vezes do que o número máximo de tentativas de entrega configurado.
Propriedades do tópico de mensagens não entregues
Pode definir as seguintes propriedades de subscrição num tópico de mensagens não entregues.
Número máximo de tentativas de entrega: um valor numérico que indica o número de tentativas de entrega que o Pub/Sub faz para uma mensagem específica. Se o cliente subscritor não conseguir acusar a receção da mensagem dentro do número configurado de tentativas de entrega, a mensagem é encaminhada para um tópico de mensagens não entregues.
- Valor predefinido = 5
- Valor máximo = 100
- Valor mínimo = 5
Projeto com o tópico de mensagens não entregues: se o tópico de mensagens não entregues estiver num projeto diferente da subscrição, tem de especificar o projeto com o tópico de mensagens não entregues. Defina o tópico de mensagens não entregues para um tópico diferente do tópico ao qual a subscrição está associada.
Configure um tópico de mensagens não entregues
Os passos seguintes descrevem o fluxo de trabalho para usar tópicos de mensagens não entregues.
Crie um tópico (para usar como um tópico de mensagens não entregues).
Crie uma subscrição para o seu tópico de mensagens não entregues.
Ative a Dead lettering na sua subscrição.
Anexe o tópico que criou anteriormente à sua subscrição.
Conceda as funções necessárias para usar tópicos de mensagens não entregues na sua conta de serviço do Pub/Sub.
Crie um tópico para usar com tópicos de mensagens não entregues
Se já criou um tópico para usar na sua subscrição, pode ignorar este passo.
Na Google Cloud consola, aceda à página Tópicos.
Clique em Criar tópico.
Introduza um ID do tópico, por exemplo,
my-test-topic
.Mantenha a opção da subscrição predefinida e clique em Criar.
Defina um tópico de mensagens não entregues numa subscrição
Pode definir um tópico de mensagens não entregues numa subscrição nova ou existente.
Defina um tópico de mensagens não entregues numa nova subscrição
Pode criar uma subscrição e definir um tópico de mensagens não entregues através da Google Cloud consola, da CLI do Google Cloud, das bibliotecas cliente ou da API Pub/Sub.
Consola
Para criar uma subscrição e definir um tópico de mensagens não entregues, conclua os seguintes passos:
Na Google Cloud consola, aceda à página Subscrições.
Clique em Criar subscrição.
Introduza o ID da subscrição.
Escolha o tópico que quer usar com a sua subscrição. A subscrição recebe mensagens do tópico. Este não é o seu tópico de mensagens não entregues. Escolhe essa opção no passo seguinte.
Na secção Devolução por não entrega, selecione Ativar devolução por não entrega.
Escolha um tópico de mensagens não entregues no menu pendente.
Se o tópico de mensagens rejeitadas escolhido não tiver uma subscrição, o sistema pede-lhe que crie uma.
No campo Máximo de tentativas de entrega, especifique um número inteiro entre 5 e 100.
Clique em Criar.
Clique no painel de detalhes para identificar possíveis itens de ação. Se algum dos itens mostrar um ícone de erro
, clique no item de ação para resolver o problema.
gcloud
Para criar uma subscrição e definir um tópico de mensagens não entregues, use o comando
gcloud pubsub subscriptions create
:
gcloud pubsub subscriptions create subscription-id \ --topic=topic-id \ --dead-letter-topic=dead-letter-topic-name \ [--max-delivery-attempts=max-delivery-attempts] \ [--dead-letter-topic-project=dead-letter-topic-project]
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.
Ruby
Antes de experimentar este exemplo, siga as Rubyinstruções de configuração no início rápido do Pub/Sub com as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Ruby Pub/Sub.
Para se autenticar no Pub/Sub, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Defina um tópico de mensagens não entregues para uma subscrição existente
Pode atualizar uma subscrição e definir um tópico de mensagens não entregues através da Google Cloud consola, da CLI gcloud, das bibliotecas cliente ou da API Pub/Sub.
Consola
Para atualizar uma subscrição e definir um tópico de mensagens não entregues, conclua os seguintes passos.
Na Google Cloud consola, aceda à página Subscrições.
Junto à subscrição que quer atualizar, clique em Mais açõesmore_vert.
No menu de contexto, selecione Editar.
Na secção Devolução por não entrega, selecione Ativar devolução por não entrega.
Escolha um tópico de mensagens não entregues no menu pendente.
Se o tópico de mensagens rejeitadas escolhido não tiver uma subscrição, o sistema pede-lhe que crie uma.
No campo Máximo de tentativas de entrega, especifique um número inteiro entre 5 e 100.
Clique em Atualizar.
Clique no painel de detalhes para identificar possíveis itens de ação. Se algum dos itens mostrar um ícone de erro
, clique no item de ação para resolver o problema.
gcloud
Para atualizar uma subscrição e definir um tópico de mensagens não entregues, use o comando
gcloud pubsub subscriptions update
:
gcloud pubsub subscriptions update subscription-id \ --dead-letter-topic=dead-letter-topic-name \ [--max-delivery-attempts=max-delivery-attempts] \ [--dead-letter-topic-project=dead-letter-topic-project]
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.
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.
Ruby
Antes de experimentar este exemplo, siga as Rubyinstruções de configuração no início rápido do Pub/Sub com as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Ruby Pub/Sub.
Para se autenticar no Pub/Sub, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Conceda as funções de IAM para usar tópicos de mensagens não entregues
Para encaminhar mensagens com impossibilidade de entrega para um tópico de mensagens não entregues, o Pub/Sub tem de ter autorização para fazer o seguinte:
- Publicar mensagens no tópico.
- Confirmar as mensagens, o que as remove da subscrição.
O Pub/Sub cria e mantém uma conta de serviço para cada projeto:
service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com
.
Pode conceder autorizações de encaminhamento atribuindo funções de publicador e subscritor a esta conta de serviço.
Consola
Para conceder autorização do Pub/Sub para publicar mensagens num tópico de mensagens rejeitadas, conclua os seguintes passos:
Na Google Cloud consola, aceda à página Subscrições.
Clique no nome da subscrição que tem o tópico de mensagens não entregues.
Clique no separador Correspondência devolvida.
Para atribuir uma função de publicador, clique em Conceder função de publicador. Se a função de publicador for atribuída com êxito, é apresentada uma marca de verificação azul
.Para atribuir uma função de subscritor, clique em Conceder função de subscritor. Se a função de publicador for atribuída com êxito, é apresentada uma marca de verificação azul
.
gcloud
Para conceder autorização ao Pub/Sub para publicar mensagens num tópico de mensagens não entregues, execute o seguinte comando:
PUBSUB_SERVICE_ACCOUNT="service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com" gcloud pubsub topics add-iam-policy-binding dead-letter-topic-name \ --member="serviceAccount:$PUBSUB_SERVICE_ACCOUNT"\ --role="roles/pubsub.publisher"
Para conceder autorização ao Pub/Sub para acusar a receção de mensagens não entregues encaminhadas, execute o seguinte comando:
PUBSUB_SERVICE_ACCOUNT="service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com" gcloud pubsub subscriptions add-iam-policy-binding subscription-id \ --member="serviceAccount:$PUBSUB_SERVICE_ACCOUNT"\ --role="roles/pubsub.subscriber"
Acompanhe as tentativas de entrega
Depois de ativar um tópico de mensagens não entregues para uma subscrição, cada mensagem dessa subscrição tem um campo que especifica o número de tentativas de entrega:
As mensagens recebidas de uma subscrição de obtenção incluem o campo
delivery_attempt
.As mensagens recebidas de uma subscrição push incluem o campo
deliveryAttempt
.
Os exemplos seguintes mostram como obter o número de tentativas de entrega:
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.
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.
Quando o Pub/Sub encaminha uma mensagem não entregável para um tópico de mensagens rejeitadas, adiciona os seguintes atributos à mensagem:
CloudPubSubDeadLetterSourceDeliveryCount
: o número de tentativas de entrega à subscrição de origem.CloudPubSubDeadLetterSourceSubscription
: o nome da subscrição de origem.CloudPubSubDeadLetterSourceSubscriptionProject
: o nome do projeto que contém a subscrição de origem.CloudPubSubDeadLetterSourceTopicPublishTime
: a data/hora em que a mensagem foi publicada originalmente.CloudPubSubDeadLetterSourceDeliveryErrorMessage
: o motivo pelo qual não foi possível entregar a mensagem no destino original. O atributo só existe para subscrições de exportação.
Monitorize mensagens encaminhadas
Depois de encaminhar uma mensagem não entregue, o serviço Pub/Sub remove a mensagem da subscrição. Pode monitorizar as mensagens encaminhadas com o Cloud Monitoring.
Se anexar uma subscrição ao tópico de mensagens não entregues, as mensagens usam a política de validade da subscrição anexada em vez do período de validade da subscrição com a propriedade do tópico de mensagens não entregues.
A métrica subscription/dead_letter_message_count
regista o número de mensagens não entregues que o Pub/Sub
encaminha a partir de uma subscrição.
Para mais informações, consulte o artigo Monitorizar mensagens não entregues encaminhadas.
Remova um tópico de mensagens não entregues
Para parar o encaminhamento de mensagens não entregues, remova o tópico de mensagens não entregues da subscrição.
Pode remover um tópico de mensagens não entregues de uma subscrição através da Google Cloud consola, da CLI gcloud ou da API Pub/Sub.
Consola
Para remover um tópico de mensagens não entregues de uma subscrição, conclua os seguintes passos:
Na Google Cloud consola, aceda à página Subscrições.
Na lista de subscrições, clique em more_vert junto à subscrição que quer atualizar.
No menu de contexto, selecione Editar.
Na secção Letras mortas, desmarque a opção Ativar letras mortas.
Clique em Atualizar.
gcloud
Para remover um tópico de mensagens não entregues de uma subscrição, use o comando
gcloud pubsub subscriptions update
e a flag --clear-dead-letter-policy
:
gcloud pubsub subscriptions update subscription-id \ --clear-dead-letter-policy
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.
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.
Ruby
Antes de experimentar este exemplo, siga as Rubyinstruções de configuração no início rápido do Pub/Sub com as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Ruby Pub/Sub.
Para se autenticar no Pub/Sub, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Preços
Quando o serviço Pub/Sub encaminha mensagens não entregáveis, aplicam-se as seguintes taxas:
- Taxas de publicação faturadas à conta de faturação associada ao projeto que contém o tópico de mensagens não entregues.
- Taxas de subscrição de mensagens de saída faturadas à conta de faturação associada ao projeto que contém a subscrição com a propriedade tópico de mensagens não entregues.
Se definir a propriedade do tópico de mensagens não entregues de uma subscrição, mas a política de localização de armazenamento de mensagens do tópico de mensagens não entregues não permitir a região que contém a subscrição, também se aplicam taxas de publicação para mensagens de saída.
As taxas de publicação de mensagens de saída são faturadas ao projeto que contém o tópico de mensagens não entregues. Para mais informações, consulte a secção Preços.
## O que se segue
- Receba as mensagens não entregues encaminhadas.
- Monitorize as aplicações Pub/Sub.
- Saiba mais sobre os conceitos de entrega de mensagens.