Conexión a Amazon DocumentDB con un controlador Java de MongoDB - Amazon DocumentDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Conexión a Amazon DocumentDB con un controlador Java de MongoDB

En esta sección se proporciona una step-by-step guía para conectarse a Amazon DocumentDB mediante controladores Java. Esto le permitirá empezar a integrar DocumentDB en sus aplicaciones Java.

Paso 1: Configuración del proyecto

  1. Con Maven, cree un proyecto java:

    mvn archetype:generate -DgroupId=com.docdb.guide -DartifactId=my-docdb-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  2. Añada el controlador Java de MongoDB como una dependencia para el proyecto en su archivo 'pom.xml':

    <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>5.3.0</version> </dependency>

Paso 2: Crea la cadena de conexión

La cadena de conexión de Amazon DocumentDB es esencial para establecer una conexión entre la aplicación y el clúster de DocumentDB. Esta cadena encapsula información crucial, como el punto final del clúster, el puerto, los detalles de autenticación y varias opciones de conexión. Para crear una cadena de conexión de DocumentDB, normalmente se empieza con el formato básico:

"mongodb://username:password@cluster-endpoint:port/?[connection options]"

Deberá reemplazar «nombre de usuario» y «contraseña» por sus credenciales reales. Puede encontrar el punto final y el número de puerto de su clúster tanto en el AWS Management Console como a través del AWS CLI. Consulte Búsqueda de puntos de conexión de un clúster para encontrar el punto final del clúster para su clúster. El puerto predeterminado de DocumentDB es 27017.

Ejemplos de cadenas de conexión

  • Realizar una conexión a DocumentDB mediante cifrado en tránsito y asegurarse de que las solicitudes de lectura vayan a las réplicas de lectura y escriban a la principal:

    "mongodb://username:password@cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false"
  • Realizar una conexión a DocumentDB mediante la autenticación de IAM:

    "mongodb://cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false& authSource=%24external& authMechanism=MONGODB-AWS"

Las diferentes opciones disponibles para la cadena de conexión son las siguientes:

Certificado TLS

tls=true|false— Esta opción activa o desactiva la seguridad de la capa de transporte (TLS). De forma predeterminada, el cifrado en tránsito está habilitado en el clúster de Amazon DocumentDB y, por lo tanto, a menos que TLS esté deshabilitado en el nivel del clúster, el valor de esta opción debería ser. true

Cuando se utiliza TLS, el código debe proporcionar un certificado SSL al crear la conexión a un clúster de DocumentDB. Descargue el certificado necesario para realizar la conexión segura al clúster:. global-bundle.pem Hay dos formas de utilizar el global-bundle.pem archivo.

  • Opción 1: Extraiga todos los certificados del global-bundle.pem archivo y use la herramienta clave de Java para almacenarlos en un .jks archivo que luego se pueda usar en el código. Consulte la pestaña Java Conexión con TLS habilitado para ver el script que muestra cómo hacerlo.

  • Opción 2: añadir dinámicamente el global-bundle.pem archivo al código, crear un almacén de claves en memoria y utilizarlo SSLContext para proporcionar el certificado como parte de la conexión.

Lectura de réplicas leídas

replicaSet=rs0&readPreference=secondaryPreferred— Al especificar estas dos opciones, se redirigen todas las solicitudes de lectura a las réplicas de lectura y las solicitudes de escritura a la instancia principal. El uso replicaSet=rs0 en la cadena de conexión permite que el controlador MongoDB mantenga una vista actualizada automáticamente de la topología del clúster, lo que permite a las aplicaciones mantener la visibilidad de las configuraciones de nodos actuales a medida que se agregan o eliminan instancias. Si no se proporcionan estas opciones ni se especifican, se readPreference=primary envían todas las lecturas y escrituras a la instancia principal. Para ver más opcionesreadPreference, consulteOpciones de preferencia de lectura.

Escribe tu preocupación y lleva un diario

Write concern determina el nivel de reconocimiento solicitado a la base de datos para las operaciones de escritura. Los controladores MongoDB ofrecen una opción para ajustar los archivos de escritura, preocupaciones y diarios. Amazon DocumentDB no espera que establezca write concern y journal, e ignora los valores enviados para w y j (y)writeConcern. journal DocumentDB siempre escribe los datos conwriteConcern: majority yjournal: true por lo que las escrituras se graban de forma duradera en la mayoría de los nodos antes de enviar un acuse de recibo al cliente.

RetryWrites

retryWrites=false— DocumentDB no admite escrituras reintentables y, por lo tanto, este atributo siempre debe estar establecido en. false

Autenticación de IAM

authSource=%24externaly authMechanism=MONGODB-AWS — Estos dos parámetros se utilizan para autenticar mediante. AWS Identity and Access Management Actualmente, la autenticación de IAM solo está disponible en la versión 5.0 del clúster basado en instancias. Para obtener más información, consulte Autenticación mediante la identidad de IAM.

Grupo de conexiones

Están disponibles estas opciones para la agrupación de conexiones:

  • maxPoolSize— Establece el número máximo de conexiones que se pueden crear en el grupo. Cuando todas las conexiones están en uso y llega una nueva solicitud, espera a que haya una conexión disponible. El valor predeterminado para los controladores Java de MongoDB es 100.

  • minPoolSize— Indica el número mínimo de conexiones que deben mantenerse en el pool en todo momento. El valor predeterminado para los controladores Java de MongoDB es 0.

  • maxIdleTimeMS— Determina cuánto tiempo puede permanecer inactiva una conexión en el grupo antes de ser cerrada y eliminada. El valor predeterminado para los controladores Java de MongoDB es de 100 milisegundos.

  • waitQueueTimeoutMS— Configura cuánto tiempo debe esperar un subproceso para que una conexión esté disponible cuando el grupo está en su tamaño máximo. Si una conexión no está disponible dentro de este tiempo, se produce una excepción. El valor predeterminado para los controladores Java de MongoDB es 120 000 milisegundos (2 minutos).

Parámetros de tiempo de espera de conexión

El tiempo de espera es un mecanismo para limitar el tiempo que puede tardar una operación o un intento de conexión antes de que se considere fallido. Los siguientes parámetros de tiempo de espera están disponibles para evitar esperas indefinidas y administrar la asignación de recursos:

  • connectTimeoutMS— Configura cuánto tiempo esperará el controlador para establecer una conexión con el clúster. El valor predeterminado es de 10 000 milisegundos (10 segundos).

  • socketTimeoutMS— Especifica cuánto tiempo esperará el controlador para recibir una respuesta del servidor para una operación que no sea de escritura. El valor predeterminado es 0 (sin tiempo de espera o es infinito).

  • serverSelectionTimeoutMS— Especifica cuánto tiempo esperará el controlador para encontrar un servidor disponible en el clúster. El valor predeterminado de esta configuración es de 30 segundos y es suficiente para que se elija una nueva instancia principal durante la conmutación por error.

Paso 3: Escribe el código de conexión

El siguiente ejemplo de código muestra cómo establecer una conexión TLS a Amazon DocumentDB:

public static MongoClient makeDbConnection(String dbName, String DbUserName, String DbPassword, String DbClusterEndPoint, String keyStorePass) throws Exception { MongoClient connectedClient; String connectionOptions = "?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false"; String connectionUrl = "mongodb://" + DbUserName + ":" + DbPassword + "@" + DbClusterEndPoint + ":27017/" + dbName + connectionOptions; try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); try (FileInputStream fis = new FileInputStream("src/main/resources/certs/truststore.jks")) { trustStore.load(fis, keyStorePass.toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(trustStore); SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); sslContext.init(null, tmf.getTrustManagers(), new SecureRandom()); ConnectionString connectionString = new ConnectionString(connectionUrl); MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(connectionString) .applyToSslSettings(builder - > { builder.enabled(true); builder.context(sslContext); }) .build(); connectedClient = MongoClients.create(settings); } return connectedClient; } catch (MongoException e5) { throw new RuntimeException(e5); } catch (Exception e) { throw new RuntimeException(e); } }

Paso 4: Gestionar las excepciones de conexión

Cuando se trabaja con DocumentDB en aplicaciones Java, el manejo de las excepciones de conexión es crucial para mantener operaciones de base de datos sólidas y confiables. Si se gestionan adecuadamente, estas excepciones no solo ayudan a diagnosticar los problemas rápidamente, sino que también garantizan que la aplicación pueda gestionar sin problemas las interrupciones temporales de la red o la falta de disponibilidad del servidor, lo que mejora la estabilidad y la experiencia del usuario. Algunas de las excepciones más importantes relacionadas con el establecimiento de la conexión son las siguientes:

  • MongoException— Es una excepción general y podría emitirse en varios escenarios no cubiertos por excepciones más específicas. Asegúrese de que esta excepción se gestione después de todas las demás excepciones específicas, ya que se trata de una excepción general de MongoDB.

  • MongoTimeoutException— Se emite cuando se agota el tiempo de espera de una operación. Por ejemplo, al consultar un punto final de un clúster que no existe.

  • MongoSocketException— Emitido por problemas relacionados con la red. Por ejemplo, una desconexión repentina de la red durante una operación.

  • MongoSecurityException— Se emite cuando se produce un error en la autenticación. Por ejemplo, al conectarse con credenciales incorrectas.

  • MongoConfigurationException— Se emite cuando hay un error en la configuración del cliente. Por ejemplo, si se utiliza una cadena de conexión no válida.

Paso 5: ejecutar el código

El siguiente ejemplo de código crea una conexión Amazon DocumentDB e imprime todas las bases de datos:

public static void TestConnection() { try (MongoClient mongoClient = makeDbConnection(DATABASE_NAME, DB_USER_NAME, DB_PASSWORD, DB_CLUSTER_ENDPOINT, KEYSTORE_PASSWORD)) { List < String > databases = mongoClient.listDatabaseNames().into(new ArrayList < > ()); System.out.println("Databases: " + databases); } catch (MongoException e) { System.err.println("MongoDB error: " + e.getMessage()); throw new RuntimeException(e); } }

Prácticas recomendadas de conexión

Las siguientes son prácticas recomendadas que se deben tener en cuenta al conectarse a Amazon DocumentDB con un controlador Java de MongoDB:

  • Cierre siempre el suyo MongoClientcuando ya no necesite que el cliente libere recursos.

  • Gestione las excepciones de forma adecuada e implemente un registro de errores adecuado.

  • Utilice variables de entorno o AWS Secrets Manager almacene información confidencial, como nombres de usuario y contraseñas.