Esta página ofrece posibles soluciones a los problemas que puede encontrar al utilizar el controlador MongoDB Rust para conectarse a una implementación de MongoDB.
Nota
Esta página solo aborda problemas de conexión. Si tiene algún otro problema con MongoDB o el controlador, visite los siguientes recursos:
Manejo de errores de operación para obtener recomendaciones sobre cómo manejar los diferentes tipos de errores que el controlador genera durante las operaciones
El MongoDB Etiqueta de desbordamiento de pilao la comunidad MongoDB Reddit para preguntas, debates o soporte técnico general
La sección Preguntas frecuentes (FAQ) para preguntas comunes y respuestas correspondientes sobre el controlador Rust.
Errores de conexión al servidor
Si ocurre un problema al intentar conectarse a un servidor, el controlador Rust genera un mensaje de error. Si este error se asemeja al siguiente mensaje, indica que el driver no puede conectarse a una implementación de MongoDB:
Error: Error { kind: ServerSelection { message: "Server selection timeout: No available servers. Topology: { Type: Unknown, Servers: [ { Address: 127.0.0.1:27017, Type: Unknown, Error: Kind: I/O error: Connection refused (os error 61), labels: {} } ] }" }, labels: {}, wire_version: None, source: None }
Las siguientes secciones describen métodos que podrían ayudar a resolver el problema.
Compruebe la cadena de conexión
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 Server es 27017, pero puede configurar MongoDB para que escuche en otro puerto.
Al conectarse a un conjunto de réplicas, incluya todos los hosts del conjunto de réplicas 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 obtener más información sobre cómo especificar varios hosts en un conjunto de réplicas, consulte la sección Conectarse a un conjunto de réplicas de la Guía de conexión.
Configurar el firewall
Si su implementación de MongoDB está alojada tras un firewall, asegúrese de que el puerto de escucha de MongoDB esté abierto en el firewall. Si su implementación escucha en el puerto de red predeterminado, asegúrese de que el puerto 27017 esté abierto en el firewall. Si su implementación escucha en un puerto diferente, asegúrese de que ese puerto esté abierto en el firewall.
Advertencia
No abra un puerto de firewall a menos que esté seguro de que es el que escucha su implementación de MongoDB.
Comprobar el número de conexiones
Cada instancia Client 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 el número de conexiones abiertas es igual a maxPoolSize, el servidor espera hasta que haya una conexión disponible. Si este tiempo de espera supera el valor maxIdleTimeMS, el controlador responde con un error.
Para obtener más información sobre cómo funcionan los grupos de conexiones en el controlador, consulte ¿Cómo funciona el agrupamiento de conexiones en el controlador Rust? en la página de preguntas frecuentes.
Errores de autenticación
Es posible que el controlador de Rust no pueda conectarse a una implementación de MongoDB si la autorización no está configurada correctamente. En estos casos, el controlador genera un mensaje de error similar al siguiente:
Error: Error { kind: Authentication { message: "SCRAM failure: bad auth : authentication failed" }, labels: {}, wire_version: None, source: Some(Error { kind: Command(CommandError { code: 8000, code_name: "AtlasError", message: "bad auth : authentication failed", topology_version: None }), labels: {}, wire_version: None, source: None }) }
Las siguientes secciones describen métodos que pueden ayudar a resolver el problema.
Verifique el formato de las credenciales
Una de las causas más comunes de problemas de autenticación es el formato de credenciales no válido en la cadena de conexión de MongoDB.
Tip
Para obtener más información sobre las cadenas de conexión, consulte la guía Crear una cadena de conexión.
Si su cadena de conexión contiene un nombre de usuario y una contraseña, asegúrese de que tengan el formato correcto.
Verificar el mecanismo de autenticación
Asegúrate de que tus credenciales y mecanismo de autenticación sean correctos. Se puede especificar tus credenciales de autenticación en las opciones de tu cadena de conexión.
Alternativamente, puede especificar sus credenciales de autenticación en una estructura Credential.
Para obtener más información sobre la autenticación, consulte la guía Mecanismos de autenticación.
Verificar que el usuario esté en la base de datos de autenticación
Cuando se utiliza un método de autenticación basado en nombre de usuario y contraseña, 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 la opción authSource en la cadena de conexión.
El siguiente ejemplo indica a MongoDB que utilice la base de datos users como base de datos de autenticación:
let uri = "mongodb://<username>:<password>@<hostname>:<port>/?authSource=users"; let client = Client::with_uri_str(uri).await?;
Errores de resolución de DNS
Es posible que el controlador de Rust no pueda resolver tu conexión DNS. En este caso, podrías recibir un mensaje de error similar al siguiente:
Error: Error { kind: DnsResolve { message: "sample message. type: SRV class: IN" }, labels: {}, wire_version: None, source: None }
Si el controlador informa este error, pruebe los métodos de las siguientes secciones para resolver el problema.
Verifica la disponibilidad de la implementación de la base de datos
Si se está conectando a MongoDB Atlas y su controlador no puede encontrar el host DNS de la implementación de la base de datos Atlas, es posible que la implementación de la base de datos se pause o elimine.
Asegúrese de que la implementación de la base de datos exista en Atlas. Si el clúster está en pausa, puede reanudarlo en la interfaz de usuario de Atlas o en la interfaz de línea de comandos de Atlas.
Para saber cómo reanudar un clúster,consulte Reanudar un clúster en la documentación de Atlas.
Comprobar las direcciones de red
Verifica que las direcciones de red o nombres de host en tu cadena de conexión sean precisos.
Si su implementación está alojada en MongoDB Atlas, puede seguir el tutorial Conectarse a su clúster para encontrar su cadena de conexión Atlas.