Solução de problemas

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 campo pushEndpoint como o protocolo para o URL de recebimento em letras minúsculas, não http:// ou HTTPS://.

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.

Use o Cloud Monitoring para pesquisar prazos vencidos de confirmação de mensagens

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
    }