Saiba mais sobre as etapas de solução de problemas que podem ser úteis ao usar o Pub/Sub.
Não é possível criar uma assinatura
Verifique se você fez o seguinte:
- Especificou um nome para a assinatura no campo
name
. Para as versões v1beta2 e posteriores, o nome da assinatura precisa ter o seguinte formato:projects/project-identifier/subscriptions/subscription-name
. - Especificou no campo
topic
o nome de um tópico atual que você quer assinar. Para as versões v1beta2 e posteriores, o nome do tópico precisa ter o seguinte formato:projects/project-identifier/topics/topic-name
. - Especificou
https://
no campopushEndpoint
como o protocolo para o URL de recebimento em letras minúsculas, nãohttp://
ouHTTPS://
.
403 (Forbidden)
erro
Se você receber esse erro, faça o seguinte:
- Verifique se você ativou a API Pub/Sub no console do Google Cloud.
- Confira se quem fez a solicitação tem as permissões necessárias para os recursos relevantes da API Pub/Sub, especialmente se ela estiver sendo usada para a comunicação entre projetos.
- Se você usa o Cloud Dataflow, certifique-se de que o
<projectId>@cloudservices.gserviceaccount.com
e a conta de serviço do Compute Engine<projectId>-compute@developer.gserviceaccount.com
tenham as permissões necessárias no recurso da API Pub/Sub correspondente. Consulte Segurança e permissões do Dataflow para mais informações. - Se você está usando o App Engine, verifique a página Permissões do seu projeto para ver se uma conta de serviço do App Engine está listada como um Editor. Se não houver, adicione sua conta de serviço do App Engine como Editor. Normalmente, a conta de serviço do App Engine está no formato
<project-id>@appspot.gserviceaccount.com
.
Como lidar com duplicatas e forçar novas tentativas
Quando você não confirma uma mensagem antes do vencimento do prazo de confirmação, o Pub/Sub reenvia a mensagem. Como resultado, o Pub/Sub pode enviar mensagens duplicadas. Use o Cloud Monitoring para
monitorar operações de confirmação com o
código de resposta expired
para detectar essa condição. Para ver esses dados, selecione a métrica
subscription/expired_ack_deadlines_count
.
Para reduzir a taxa de duplicação, prolongue o prazo da mensagem.
- As bibliotecas de cliente prolongam o prazo automaticamente, mas há limites padrão de quanto o prazo pode ser prolongado.
- Use o método
modifyAckDeadline
para estender o prazo de confirmação se você estiver criando sua própria biblioteca de cliente.
Como alternativa, para forçar o Pub/Sub a repetir uma mensagem, defina modifyAckDeadline
como 0.
Operações administrativas excessivas
Se você perceber que está gastando muito da cota de operações administrativas, talvez seja necessário refatorar o código. Para ilustrar, considere este pseudo-código. Neste exemplo, uma operação administrativa (GET
) está sendo usada para verificar a presença de uma assinatura antes de tentar consumir os recursos dela. As operações GET
e CREATE
são do administrador:
if !GetSubscription my-sub { CreateSubscription my-sub } Consume from subscription my-sub
Um padrão mais eficiente é tentar consumir mensagens da assinatura (supondo que você esteja razoavelmente seguro do nome da assinatura). Nesse caso, você só recebe ou cria a assinatura em caso de erro. Veja este exemplo:
try { Consume from subscription my-sub } catch NotFoundError { CreateSubscription my-sub Consume from subscription my-sub }