Solução de problemas de conexão
Nesta página
- Erro de conexão
- Verifique a connection string
- Configurar firewall
- Erro de autenticação
- Verifique a connection string
- Verificar se o usuário está no banco de dados de autenticação
- Erro ao enviar mensagem
- Verifique a connection string
- Verificar se o usuário está no banco de dados de autenticação
- Configurar firewall
- Verifique o número de conexões
- Erro de tempo limite
- definir
maxConnectionTimeoutMS
- Defina
maxConnectionLifeTime
emaxConnectionIdleTime
- Verifique o número de conexões
- Dicas adicionais
- Obter informações de registro para TLS/SSL
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:
As Perguntas frequentes (FAQ) para o driver Kotlin
O tópico Problemas e ajuda para obter informações sobre como relatar bugs, contribuir com o driver e recursos adicionais
Os fóruns da MongoDB Community para perguntas, discussões ou suporte técnico geral
Erro de conexão
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 a connection string
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.
Configurar firewall
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.
Erro de autenticação
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.
Verifique a connection string
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.
Verificar se o usuário está no banco de dados de autenticação
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")
Erro ao enviar mensagem
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 a connection string
Verifique se a connection string em seu aplicativo está correta. Isso é descrito em Erro de conexão e Erro de autenticação.
Verificar se o usuário está no banco de dados de autenticação
O usuário precisa ser reconhecido em seu banco de dados de autenticação. Isso é descrito em Erro de autenticação.
Configurar firewall
O firewall precisa ter uma porta aberta para se comunicar com a instância do MongoDB. Isso é descrito em Erro de conexão.
Verifique o número de conexões
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.
Erro de tempo limite
À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.
definir maxConnectionTimeoutMS
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.
Definir maxConnectionLifeTime
e maxConnectionIdleTime
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.
Verifique o número de conexões
Você pode ter muitas conexões abertas. A solução para isso é descrita em Erro ao enviar mensagem.
Dicas adicionais
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.
Obter informações de registro para TLS/SSL
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.