Menu Docs

Solução de problemas de conexão

Esta página oferece soluções potenciais para problemas que você pode ver ao se conectar a uma instância do MongoDB ou a um conjunto de réplicas ao usar o driver Kotlin do MongoDB.

Observação

Esta página lista apenas problemas de conexão. Se você estiver tendo qualquer outro problema com o MongoDB, considere os seguintes recursos:

A seguinte mensagem de erro é uma mensagem geral indicando que o driver não pode se conectar a um servidor no nome de host especificado ou porta:

Error: couldn't connect to server 127.0.0.1:27017

Se você receber esse erro, tente os métodos a seguir para resolver o problema.

Verifique se o nome do host e o número da porta na connection string estão corretos. Na mensagem de erro de 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 é 27017, mas você pode configurar o MongoDB para se comunicar em outra porta.

Supondo que o sistema do MongoDB use a porta padrão, verifique se o firewall tem a porta 27017 aberta. If your deployment is using a different port, verify that port is open in your firewall.

Importante

Não abra portas no firewall, a menos que tenha certeza de que é a porta usada pela sua instância do MongoDB.

O driver Kotlin pode falhar ao conectar a uma instância do MongoDB se a autorização não estiver configurada corretamente. Isso geralmente resulta em uma mensagem de erro semelhante à seguinte:

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

Se você receber esse erro, tente os métodos a seguir para resolver o problema.

Uma connection string inválida é a causa mais comum de problemas de autenticação ao tentar se conectar ao MongoDB.

Observação

Para obter mais informações sobre o uso de string de conexão com o driver Kotlin, consulte URI de conexão no Guia de conexão.

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

Observação

Se o nome de usuário ou senha incluir qualquer um dos seguintes caracteres, eles devem usar codificação percentual:

: / ? # [ ] @

Se a sua MongoDB deployment estiver no MongoDB Atlas, você poderá verificar sua string de conexão utilizando o Atlas Connection Example. Certifique-se de substituir a string de conexão no exemplo pela sua.

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

Para autenticar uma conexão corretamente usando um nome de usuário e uma 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 o authSource na connection string. O exemplo abaixo orienta o driver a usar o users como banco de dados de autenticação:

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

Quando você envia uma solicitação pelo driver e ele não consegue enviar o comando, ele geralmente exibe a seguinte mensagem de erro geral:

com.mongodb.MongoSocketWriteException: Exception sending message

Se você receber esse erro, tente os métodos a seguir para resolver o problema.

Verifique se a connection string em seu aplicativo está correta. Isso é descrito em Erro de conexão e Erro de autenticação.

O usuário precisa ser reconhecido em seu banco de dados de autenticação. Isso é descrito em Erro de autenticação.

O firewall precisa ter uma porta aberta para se comunicar com a instância do MongoDB. Isso é descrito em Erro de conexão.

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 já houver uma série de conexões abertas iguais a maxPoolSize, o servidor aguardará até que uma conexão se torne disponível. Se esse tempo de espera exceder o valor de maxIdleTimeMS, o driver responderá com um erro.

Às vezes, quando você envia mensagens através do driver para o servidor, as mensagens demoram um pouco para responder. Quando isso acontece, você pode receber uma mensagem de erro semelhante a uma das seguintes mensagens de erro:

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 a quantidade de tempo que o driver Kotlin aguarda uma conexão antes de atingir o tempo limite. O valor padrão é 10000. Você pode aumentar esse valor ou defini-lo para 0 se quiser que o driver nunca expire.

Considere definir maxConnectionLifeTime e maxConnectionIdleTime. Esses parâmetros configuram por quanto tempo uma conexão pode ser mantida com uma instância MongoDB. Para obter mais informações sobre esses parâmetros, consulte Configurações do pool de conexões.

Você pode ter muitas conexões abertas. A solução para isso é descrita em Erro ao enviar mensagem.

Embora não esteja relacionada a uma mensagem de erro específica, esta seção inclui informações adicionais que podem ser úteis ao tentar solucionar problemas de conexão.

Ao usar TLS/SSL, você pode usar a propriedade do sistema -Djavax.net.debug=all para exibir declarações de registro adicionais. Isso pode ajudar ao tentar depurar quaisquer problemas de conexão. Consulte o guia Oracle para depuração de conexõesTLS/SSL para mais informações.