Menu Docs
Página inicial do Docs
/ / /
Java síncrono

Solução de problemas de conexão

Nesta página

  • Erros de conexão do servidor
  • Verifique a string de conexão
  • Configurar firewall
  • Verifique o número de conexões
  • Erros de autenticação
  • Verifique a formatação das credenciais
  • Verificar o mecanismo de autenticação
  • Verificar se o usuário está no banco de dados de autenticação
  • Erros de resolução de DNS
  • Verifique a disponibilidade de implantação de banco de dados
  • Verifique os endereços de rede
  • Erros de certificado de segurança
  • Erros de tempo limite
  • definir maxConnectionTimeoutMS
  • Defina maxConnectionLifeTime e maxConnectionIdleTime
  • Exceções de tempo limite de seleção do servidor MongoDB
  • Erros diversos
  • Exceção para monitorar thread
  • Exceção de solicitação de certificado
  • Dicas de depuração
  • Registro de verbosidade para TLS/SSL

Esta página oferece possíveis soluções para problemas que você pode encontrar ao usar o driver Java do MongoDB para se conectar a uma implantação do MongoDB.

Observação

Esta página aborda apenas problemas de conexão. Se você encontrar outros problemas ao usar o MongoDB ou o driver, acesse os seguintes recursos:

  • A páginaProblemas e ajuda do para obter informações sobre como reportar bugs, contribuir para o driver e encontrar mais recursos

  • Os Fóruns da MongoDB Community para perguntas, discussões ou suporte técnico geral

  • A página de Perguntas frequentes (FAQ) para obter respostas a perguntas frequentes sobre o driver Java

Quando ocorre um problema ao tentar se conectar a um servidor, o driver Java retorna uma mensagem de erro. Se esse erro for semelhante à seguinte mensagem, isso indica que o driver não pode se conectar a um sistema do MongoDB:

Error: couldn't connect to server 127.0.0.1:27017

As seções a seguir descrevem métodos que podem ajudar a resolver o problema.

Verifique se o nome do host e o número da porta na string de conexão estão corretos. Na mensagem de erro da amostra, o nome do host é 127.0.0.1 e a porta é 27017. O valor de porta padrão para uma instância do MongoDB Server é 27017, mas você pode configurar o MongoDB para escutar em outra porta.

Ao conectar a um conjunto de réplicas, inclua todos os hosts do conjunto de réplicas em sua connection string. Separe cada um dos hosts na connection string com uma vírgula. Isto permite ao condutor estabelecer uma conexão se um dos hosts não estiver acessível.

Para saber como especificar vários hosts de conjuntos de réplicas, consulte a seção Conectar-se a um conjunto de réplicas do Guia de conexão.

Se sua implantação do MongoDB estiver hospedada atrás de um firewall, certifique-se de que a porta na qual o MongoDB escuta esteja aberta no firewall. Se sua implantação escutar na porta de rede padrão, verifique se a porta 27017 está aberta no firewall. Se sua implantação escutar em uma porta diferente, certifique-se de que a porta esteja aberta no firewall.

Aviso

Não abra uma porta de firewall, a menos que tenha certeza de que é aquela que sua implantação do MongoDB escuta.

Cada instância do MongoClient aceita um número máximo de conexões abertas simultâneas em seu pool de conexões. O parâmetro de configuração maxPoolSize define este valor e é configurado para 100 por padrão. Se o número de conexões abertas for igual a maxPoolSize, o servidor aguardará até que uma conexão fique disponível. Se esse tempo de espera exceder o valor de maxIdleTimeMS, o driver responderá com um erro.

Para saber mais sobre como o pool de conexões funciona no driver, consulte Como funciona o pool de conexões no driver Java? nas perguntas frequentes.

O Java Driver pode não conseguir se conectar a uma implementação do MongoDB se a autorização não estiver configurada corretamente. Nesses casos, o driver levanta uma mensagem de erro semelhante à seguinte mensagem:

Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017.

As seções a seguir descrevem métodos que podem ajudar a resolver o problema.

Uma das causas mais comuns de problemas de autenticação é a formatação de credenciais inválidas na string de conexão do MongoDB.

Dica

Para obter mais informações sobre o uso de strings de conexão, consulte a página URI de conexão no Guia de conexão.

Se sua string de conexão contiver um nome de usuário e senha, certifique-se de que eles estejam no formato correto.

Observação

Se seu nome de usuário ou senha incluir qualquer um dos seguintes caracteres, você deverá codificar por porcentagem:

: / ? # [ ] @

Use seu nome de usuário e senha codificados em porcentagem na sua string de conexão.

Verifique se as credenciais e o mecanismo de autenticação estão corretos. Você pode especificar suas credenciais de autenticação nas opções da sua string de conexão.

Se você construir um cliente usando um MongoCredential, o método construtor corresponde ao mecanismo de autenticação. O código a seguir mostra o método construtor para o mecanismo de autenticação SCRAM-SHA-256:

MongoCredential credential = MongoCredential.createScramSha256Credential("<db_username>", "<authenticationDb>", "<dbpassword>");

Para saber mais sobre como especificar mecanismos de autenticação, consulte os guias Mecanismos de autenticação e Mecanismos de autenticação empresarial.

Se utilizar um método de autenticação baseado em nome de usuário e senha, o nome de usuário deve ser definido no banco de dados de autenticação.

O banco de dados de autenticação padrão é o banco de dados admin. Para usar outro banco de dados de autenticação, especifique a opção authSource na string de conexão.

O exemplo a seguir instrui o MongoDB a usar o banco de dados users como o banco de dados de autenticação:

MongoClient mongoClient = MongoClients.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users");

O Java Driver pode não conseguir resolver sua conexão DNS. Quando isso acontece, você pode receber uma mensagem de erro semelhante à seguinte:

com.mongodb.MongoSocketWriteException: Exception sending message

Se o driver relatar esse erro, tente os métodos nas seções a seguir para resolver o problema.

Se você estiver se conectando ao MongoDB Atlas e seu driver não conseguir encontrar o host DNS da implantação de banco de dados Atlas, a implantação de banco de dados poderá ser pausada ou excluída.

Certifique-se de que o sistema de banco de dados exista no Atlas. Se o cluster estiver pausado, você poderá retomar o cluster na UI do Atlas ou na interface da linha de comando do Atlas.

Para saber como retomar um cluster, consulte Retomar um cluster na documentação do Atlas.

Verifique se os endereços de rede ou nomes de host em sua string de conexão estão corretos.

Se a sua implantação estiver hospedada no MongoDB Atlas, você poderá seguir o tutorial Conectar ao Seu Cluster para localizar sua connection string do Atlas.

Se você utilizar o Java versão 8 ou anterior, você poderá precisar adicionar um certificado ao seu armazenamento de confiança. Você pode atualizar para uma versão posterior do JDK ou ler as instruções de Perguntas frequentes de segurança na documentação do Atlas para obter informações sobre como adicionar o certificado.

Ao enviar mensagens para o servidor através do driver, as mensagens ocasionalmente demoram um pouco para responder. Se isso acontecer, você poderá receber uma mensagem de erro semelhante a uma das mensagens a seguir:

Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}.
No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description

Se você receber um desses erros, tente os seguintes métodos para resolver o problema.

A opção maxConnectionTimeoutMS indica o tempo que o driver Java aguarda uma conexão antes de atingir o tempo limite. O valor padrão é 10000. Você pode aumentar esse valor ou defini-lo como 0 se quiser que o driver nunca atinja o tempo limite.

Considere configurar maxConnectionLifeTime e maxConnectionIdleTime. Esses parâmetros configuram a duração da conexão do driver com uma instância do MongoDB. Para obter mais informações sobre esses parâmetros, consulte a página Configurações do pool de conexões.

Talvez seu aplicativo não consiga concluir uma solicitação mesmo quando alguns servidores estão disponíveis, fazendo com que o driver retorne uma exceção de tempo limite de seleção de servidor.

Esta exceção é do tipo MongoTimeoutException. Veja a seguir uma amostra da exceção que ocorre se você tentar enviar uma solicitação para um conjunto de réplicas no qual o primary não está acessível:

com.mongodb.MongoTimeoutException:
Timed out while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}.
Client view of cluster state is
{type=REPLICA_SET,
servers=[
{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused}},
{address=localhost:27018, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused}},
{address=localhost:27019, type=REPLICA_SET_SECONDARY, roundTripTime=15.0 ms, state=CONNECTED}
]
}

O erro inclui uma exibição do estado do cluster que descreve o estado da conexão de cada nó, o que pode ajudá-lo a identificar a origem do problema de conexão.

No erro anterior, o único servidor conectado, localhost:27019, é um nó secundário. Por esse motivo, a solicitação expira, pois o driver não consegue selecionar um servidor que satisfaça a preferência de leitura de primary. Nessa situação, você ainda pode executar operações de leitura no nó secundário conectado se definir a read preference para secondary, secondaryPreferred ou nearest.

Você também pode especificar a opção de conexão serverSelectionTimeoutMS para ajustar a quantidade de tempo em que o driver deve selecionar um servidor. Para saber mais, consulte o guia Opções de conexão .

Esta seção mostra os erros de conexão que não se enquadram em uma categoria mais ampla.

INFO: Exception in monitor thread while connecting to server ssc-cluster-01-shard-00-02.9cbnp.mongodb.net:27017

Esta linha de registro indica que o monitor que verifica continuamente o status de cada membro do conjunto de réplicas ou servidor mongos falhou ao entrar em contato com um dos nós ou servidores. Esta é uma mensagem esperada durante operações de manutenção do servidor e pode ser ignorada com segurança.

javax.net.ssl.SSLHandshakeException: extension (5) should not be presented in certificate_request

Esse é um problema conhecido em determinadas versões do JDK que pode ocorrer ao tentar se conectar usando o TLS 1.3 protocolo.

Se você encontrar esse erro ao se conectar à sua instância ou cluster do MongoDB, atualize seu JDK para uma das seguintes versões de patch ou mais recentes:

  • JDK 11.0.7

  • JDK 13.0.3

  • JDK 14.0.2

Para saber mais sobre esse problema, consulte a descrição do problema na questão do rastreador do sistema OpenJDK Bug.

Embora não esteja relacionada a uma mensagem de erro específica, esta seção inclui informações que podem ajudar no processo de solução de problemas de conexão.

É possível usar a propriedade de sistema -Djavax.net.debug=all para habilitar o log em nível de depuração relacionado a todas as conexões, incluindo as conexões estabelecidas usando TLS/SSL.

Habilitar o registro em nível de depuração pode ajudá-lo a diagnosticar o problema raiz dos problemas de conexão. Para saber mais sobre as mensagens de registro TLS/SSL, consulte a seção Depuração de conexões SSL/TLS Documentação Java.

Voltar

Perguntas frequentes