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 confirmar, o Pub/Sub pode encaminhá-las para um tópico de mensagens não entregues (também conhecido como uma fila de mensagens não entregues).
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 de forma integral, 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 que lhe conceda a
função IAM 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 repete 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 não entregues 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 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 possível. O serviço pode encaminhar uma mensagem após menos tentativas do que o configurado ou pode tentar a entrega mais algumas vezes antes de encaminhar.
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 indicação de teclas mortas 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 à 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 nova subscrição ou numa subscrição 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 Correspondência devolvida, selecione Ativar correspondência devolvida.
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.