Falhas de publicação normalmente são causadas por falhas de publicação como CPUs de serviço insuficientes, integridade da linha de execução ruim ou congestionamento de rede. A política de nova tentativa do editor define o número número de vezes que o Pub/Sub tenta entregar uma mensagem e o tempo entre cada tentativa.
Este documento contém informações sobre como usar solicitações de repetição com mensagens publicadas em um tópico.
Antes de começar
Antes de configurar o fluxo de trabalho de publicação, faça o seguinte tarefas:
- Saiba mais sobre assuntos e o fluxo de trabalho de publicação.
- Crie um tópico.
Funções exigidas
Para ter as permissões necessárias para repetir solicitações de mensagens para um tópico, faça o seguinte:
peça ao administrador para conceder a você
Editor do Pub/Sub (roles/pubsub.publisher
) no tópico.
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
Você precisa de permissões adicionais para criar ou atualizar tópicos e assinaturas.
Sobre solicitações de repetição
As configurações de nova tentativa controlam como as bibliotecas de cliente do Pub/Sub tentam publicar solicitações novamente. As bibliotecas de cliente têm alguma das seguintes configurações de repetição:
- Tempo limite da solicitação inicial: o tempo antes de uma biblioteca de cliente parar de esperar a conclusão da solicitação de publicação inicial.
- Atraso de nova tentativa: quanto tempo após uma solicitação atingir o tempo limite em que uma biblioteca de cliente aguarda a nova tentativa de solicitação.
- Tempo limite total: quanto tempo depois de uma biblioteca de cliente parar de tentar publicar as solicitações novamente.
Para tentar publicar as solicitações novamente, o tempo limite da solicitação inicial precisa ser menor que o tempo limite total. Por exemplo, se você estiver usando espera exponencial, as bibliotecas de cliente calculam o tempo limite da solicitação e o atraso de nova tentativa da seguinte maneira:
- Após cada solicitação de publicação, o tempo limite da solicitação aumenta de acordo com o multiplicador de tempo limite da solicitação, até atingir o tempo limite máximo.
- Após cada nova tentativa, o tempo de atraso para a nova tentativa aumenta de acordo com o multiplicador de atraso máximo, até o atraso máximo de nova tentativa.
Tentar novamente uma solicitação de mensagem
Durante o processo, talvez você veja publicações temporárias ou permanentes. de segurança. Para erros temporários, normalmente não é preciso realizar nenhuma enquanto o Pub/Sub tenta repetir as mensagens automaticamente.
Também pode ocorrer um erro quando uma operação de publicação é bem-sucedida, mas a não for recebida a tempo pelo cliente editor. Nesse caso também, o de publicação é repetida. Como resultado, você pode ter duas mensagens idênticas com IDs de mensagem diferentes.
Em caso de erros persistentes, considere implementar as ações apropriadas fora de do processo de publicação para evitar sobrecarregar o Pub/Sub.
As falhas de publicação são repetidas automaticamente, exceto para erros garantir novas tentativas. Este exemplo de código demonstra a criação de um editor com atributos configurações de repetição (nem todas as bibliotecas de cliente oferecem suporte a novas tentativas configurações consulte a documentação de referência da API para o idioma escolhido):
C++
Antes de tentar esse exemplo, siga as instruções de configuração do C++ em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C++.
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C#.
Go
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Repetir solicitações com chaves de ordem
Suponha que você tenha apenas um cliente editor. Você está usando o as bibliotecas de cliente do Pub/Sub para publicar as mensagens 1, 2 e 3 para a mesma chave de ordem A. Agora, suponha que a resposta publicada para a mensagem 1 seja não recebidas pelo cliente editor antes de o prazo da RPC expirar. Mensagem 1 precisa ser republicado. A sequência de mensagens recebidas pelo cliente assinante se torna 1, 1, 2 e 3, se você presume que a mensagem 2 é publicada somente depois a mensagem 1 é concluída. Cada mensagem publicada tem a própria ID da mensagem. Do ponto de vista do cliente assinante, quatro mensagens foram publicado, com os dois primeiros com conteúdo idêntico.
Repetir solicitações de publicação com chaves de ordem também pode ser complicado por lote configurações. A biblioteca de cliente agrupa as mensagens em lote para aumentar a eficiência publicação. Continue com o exemplo anterior e considere que as mensagens 1 e 2 são agrupados. Esse lote é enviado ao servidor como uma única solicitação. Se o servidor não retornar uma resposta a tempo, o cliente editor tentará novamente em um lote de duas mensagens. Portanto, é possível que o cliente assinante recebe as mensagens 1, 2, 1, 2 e 3. Se você usa um Pub/Sub uma biblioteca de cliente para publicar mensagens em ordem e houver falha na operação de publicação, o serviço vai falhar nas operações de publicação de todas as mensagens restantes no mesmo chave de ordem. Então, o cliente editor pode decidir seguir qualquer uma das seguintes operações:
Publique novamente todas as mensagens com falha em ordem
republicar um subconjunto das mensagens com falha para
Publicar um novo conjunto de mensagens
Se ocorrer um erro não passível de repetição, a biblioteca de cliente não publicará a mensagem e interromperá a publicação de outras mensagens com a mesma chave de ordem. Por exemplo, quando um editor envia uma mensagem para um tópico que não existe, ocorre um erro que não pode ser repetido. Para continuar publicando mensagens com a mesma chave de ordem, chame um método para retomar a publicação e comece a publicar novamente.
O exemplo a seguir mostra como retomar a publicação de mensagens com a mesma chave de ordem.
C++
Antes de tentar esse exemplo, siga as instruções de configuração do C++ em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C++.
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C#.
Go
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Ruby
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
A seguir
Para saber como configurar opções avançadas de publicação, consulte: