Como solucionar problemas

Saiba mais sobre as etapas de solução de problemas que podem ser úteis ao usar o Cloud Pub/Sub.

Não é possível criar uma assinatura

Verifique se você realizou estas ações:

  • 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 a ser assinado. Para as versões v1beta2 e posteriores, o nome do tópico precisa ter o seguinte formato: projects/project-identifier/topics/topic-name.
  • Especificou, no campo pushEndpoint, o protocolo para o URL de recebimento https://, em letras minúsculas, não http:// ou HTTPS://.

Assinante de push não recebe mensagens

Verifique estes itens:

  • Veja se há erros no Stackdriver Monitoring relacionados à assinatura em questão.
  • No App Engine, recomenda-se o uso do prefixo /_ah/push-handlers/ no caminho do URL dos endpoints, conforme descrito em "Como registrar endpoints do App Engine". Isso permite que o ponto de extremidade receba mensagens de push da API Cloud Pub/Sub;
  • Em outros ambientes, certifique-se de que o URL do seu ponto de extremidade possa ser acessado da Internet sem a necessidade de um login. Para verificar se o URL não é restrito, acesse-o com uma ferramenta de diagnóstico, como cURL.
  • Para domínios diferentes de appspot.com, lembre-se de registrar o domínio no Console do Google Cloud Platform. Consulte Como registrar outros pontos de extremidade para mais detalhes.

Erro 403 (Forbidden)

Se você receber esse erro, faça o seguinte:

  • Verifique se você ativou a Cloud Pub/Sub API no console do GCP.
  • Confira se quem fez a solicitação tem as permissões necessárias para os recursos relevantes da API do Cloud 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 do Cloud Pub/Sub correspondente. Para mais informações, consulte Segurança e permissões do Google Cloud Dataflow.
  • 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. Geralmente, a conta de serviço do App Engine tem o formato <project-id>@appspot.gserviceaccount.com.

Como lidar com mensagens duplicadas

O Cloud Pub/Sub pode enviar mensagens duplicadas. Por exemplo, quando você não confirma uma mensagem antes do prazo de confirmação, o Cloud Pub/Sub reenvia a mensagem. Use o Stackdriver para monitorar operações de confirmação com o código de resposta expired para detectar essa condição. Uma maneira de conseguir esses dados é usando a métrica Operações de mensagem de confirmação, agrupada pelo response_code.

Use o Stackdriver 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.
  • Se você estiver criando sua própria biblioteca de cliente, use o método modifyAckDeadline para prolongar o prazo de confirmação.

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. Observe que tanto GET quanto CREATE são operações administrativas:


    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ó obtém 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
    }
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Pub/Sub