Solução de problemas de conexão
Nesta página
- Erros de certificado de segurança
- Erros de tempo limite
- definir
maxConnectionTimeoutMS
- Defina
maxConnectionLifeTime
emaxConnectionIdleTime
- 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
Erros de certificado de segurança
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.
Erros de tempo limite
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.
definir maxConnectionTimeoutMS
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.
Definir maxConnectionLifeTime
e maxConnectionIdleTime
Considere configurar maxConnectionLifeTime
maxConnectionIdleTime
e. 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.
Exceções de tempo limite de seleção do servidor MongoDB
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 .
Erros diversos
Esta seção mostra os erros de conexão que não se enquadram em uma categoria mais ampla.
Exceção para monitorar thread
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.
Exceção de solicitação de certificado
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.
Dicas de depuração
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.
Registro de verbosidade para TLS/SSL
É 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.