Menu Docs
Página inicial do Docs
/ / /
Driver de sincronização Java

Solução de problemas de conexão

Nesta página

  • 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

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 das 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 maxConnectionIdleTimee. Esses parâmetros configuram por quanto tempo o driver mantém uma conexão com uma instância do MongoDB . Para obter mais informações sobre esses parâmetros, consulte 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 no problema 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