Docs Menu
Docs Home
/ /
/ / /

Solución de problemas de conexión

Esta página ofrece posibles soluciones a los problemas que puede experimentar al conectarse a una instancia o un conjunto de réplicas de MongoDB mientras usa el controlador MongoDB Kotlin.

Nota

Esta página solo enumera problemas de conexión. Si tiene otros problemas con MongoDB, consulte los siguientes recursos:

  • El Tema deproblemas y ayuda para obtener información sobre cómo informar errores, contribuir al controlador y recursos adicionales

  • El MongoDB Etiqueta Stack Overflow o la comunidad MongoDB Reddit para soporte general

El siguiente mensaje de error es un mensaje general que indica que el controlador no puede conectarse a un servidor en el nombre de host o puerto especificado:

Error: couldn't connect to server 127.0.0.1:27017

Si recibe este error, pruebe los siguientes métodos para resolver el problema.

Verifique que el nombre de host y el número de puerto en la cadena de conexión sean correctos. En el mensaje de error de ejemplo, el nombre de host es 127.0.0.1 El puerto es 27017. El valor de puerto predeterminado para una instancia de MongoDB es 27017, pero puede configurar MongoDB para que se comunique en otro puerto.

Suponiendo que su implementación de MongoDB usa el puerto predeterminado, verifique que su firewall tenga abierto el puerto 27017. Si su implementación usa un puerto diferente, verifique que esté abierto en su firewall.

Importante

No abra puertos en su firewall a menos que esté seguro de que es el puerto utilizado por su instancia de MongoDB.

El controlador de Kotlin puede fallar al conectarse a una instancia de MongoDB si la autorización no está configurada correctamente. Esto suele generar un mensaje de error similar al siguiente:

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

Si recibe este error, pruebe los siguientes métodos para resolver el problema.

Una cadena de conexión no válida es la causa más común de problemas de autenticación al intentar conectarse a MongoDB.

Nota

Para obtener más información sobre el uso de cadenas de conexión con el controlador Kotlin, consulte URI de conexión en la Guía de conexión.

Si su cadena de conexión contiene un nombre de usuario y una contraseña de base de datos, asegúrese de que tengan el formato correcto.

Nota

Si el nombre de usuario o la contraseña de la base de datos incluye alguno de los siguientes caracteres, deben estar codificados por porcentaje:

: / ? # [ ] @

Si su implementación de MongoDB está en MongoDB Atlas, puede comprobar su cadena de conexión con el ejemplo de conexión de Atlas. Asegúrese de reemplazar la cadena de conexión del ejemplo con la suya.

Al conectarse a un conjunto de réplicas, debe incluir todos los hosts en la cadena de conexión. Separe cada host con una coma. Esto permite que el controlador establezca una conexión si uno de los hosts no es accesible.

Para autenticar correctamente una conexión mediante un nombre de usuario y una contraseña de base de datos, el nombre de usuario debe estar definido en la base de datos de autenticación. La base de datos de autenticación predeterminada es admin. Para usar una base de datos diferente para la autenticación, especifique authSource en la cadena de conexión. El siguiente ejemplo indica al controlador que use users como base de datos de autenticación:

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

Cuando envía una solicitud a través del controlador y este no puede enviar el comando, a menudo muestra el siguiente mensaje de error general:

com.mongodb.MongoSocketWriteException: Exception sending message

Si recibe este error, pruebe los siguientes métodos para resolver el problema.

Verifica que la cadena de conexión en tu aplicación sea correcta. Esto se describe en Error de conexión y Error de autenticación.

El usuario debe estar reconocido en la base de datos de autenticación. Esto se describe en Error de autenticación.

El firewall necesita tener un puerto abierto para comunicarse con la instancia de MongoDB. Isto está descrito em Erro de Conexão.

Cada instancia MongoClient admite un número máximo de conexiones abiertas simultáneas en su grupo de conexiones. El parámetro de configuración maxPoolSize define este valor y está establecido en 100 de forma predeterminada. Si ya hay maxPoolSize conexiones abiertas, el servidor espera hasta que haya una disponible. Si este tiempo de espera supera el valor maxIdleTimeMS, el controlador responde con un error.

A veces, al enviar mensajes al servidor a través del controlador, estos tardan en responder. En este caso, podría recibir un mensaje de error similar a uno de los siguientes:

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

Si recibes uno de estos errores, intenta los siguientes métodos para resolver el problema.

La opción maxConnectionTimeoutMS indica el tiempo que el controlador Kotlin espera una conexión antes de agotar el tiempo de espera. El valor predeterminado es 10000. Puede aumentar este valor o establecerlo en 0 si desea que el controlador nunca agote el tiempo de espera.

Considere configurar maxConnectionLifeTime maxConnectionIdleTimey. Estos parámetros configuran la duración de la conexión con una instancia de MongoDB. Para obtener más información sobre estos parámetros, consulte Configuración del grupo de conexiones.

Es posible que tenga demasiadas conexiones abiertas. La solución se describe en "Error al enviar mensaje".

Si bien no está relacionado con un mensaje de error específico, esta sección incluye información adicional que puede ser útil al intentar solucionar problemas de conexión.

Al usar TLS/SSL, puede usar la -Djavax.net.debug=all propiedad del sistema para ver declaraciones de registro adicionales. Esto puede ser útil al intentar depurar cualquier problema de conexión. Consulte la guía de Oracle para depurar conexiones TLS/SSL para obtener más información.

Volver

AWS Lambda