Connessione ad Amazon DocumentDB con un driver Java MongoDB - Amazon DocumentDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Connessione ad Amazon DocumentDB con un driver Java MongoDB

Questa sezione fornisce una step-by-step guida per la connessione ad Amazon DocumentDB utilizzando i driver Java. Questo ti consentirà di iniziare a integrare DocumentDB nelle tue applicazioni Java.

Fase 1: Configurazione del progetto

  1. Usando Maven, crea un progetto java:

    mvn archetype:generate -DgroupId=com.docdb.guide -DartifactId=my-docdb-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  2. Aggiungi il driver Java MongoDB come dipendenza per il progetto nel tuo file 'pom.xml':

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

Passaggio 2: creare la stringa di connessione

La stringa di connessione di Amazon DocumentDB è essenziale per stabilire una connessione tra l'applicazione e il cluster DocumentDB. Questa stringa incapsula informazioni cruciali come l'endpoint del cluster, la porta, i dettagli di autenticazione e varie opzioni di connessione. Per creare una stringa di connessione DocumentDB, in genere si inizia con il formato base:

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

Dovrai sostituire «nome utente» e «password» con le tue credenziali effettive. Puoi trovare l'endpoint e il numero di porta del tuo cluster AWS Management Console sia in che tramite. AWS CLI Vedi Individuazione degli endpoint di un cluster per trovare l'endpoint del cluster per il tuo cluster. La porta predefinita per DocumentDB è 27017.

Esempi di stringhe di connessione

  • Effettuare una connessione a DocumentDB utilizzando la crittografia in transito e assicurandosi che le richieste di lettura vadano alle repliche di lettura e scrivano al file primario:

    "mongodb://username:password@cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false"
  • Effettuare una connessione a DocumentDB utilizzando l'autenticazione IAM:

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

Le diverse opzioni disponibili per la stringa di connessione sono le seguenti:

Certificato TLS

tls=true|false— Questa opzione abilita o disabilita Transport Layer Security (TLS). Per impostazione predefinita, la crittografia in transito è abilitata sul cluster Amazon DocumentDB e pertanto, a meno che TLS non sia disabilitato a livello di cluster, il valore per questa opzione dovrebbe essere. true

Quando si utilizza TLS, il codice deve fornire un certificato SSL durante la creazione della connessione a un cluster DocumentDB. Scarica il certificato necessario per stabilire la connessione sicura al cluster:. global-bundle.pem Esistono due modi per utilizzare il global-bundle.pem file.

  • Opzione 1: estrai tutti i certificati dal global-bundle.pem file e utilizza il keytool di Java per archiviarli in un .jks file che può essere successivamente utilizzato nel codice. Fate riferimento alla scheda Java Connessione con TLS abilitato per lo script che mostra come eseguire questa operazione.

  • Opzione 2: aggiungi dinamicamente il global-bundle.pem file nel codice, crea un keystore in memoria e utilizzalo SSLContext per fornire il certificato come parte della connessione.

Lettura da repliche lette

replicaSet=rs0&readPreference=secondaryPreferred— La specificazione di queste due opzioni indirizza tutte le richieste di lettura alle repliche di lettura e le richieste di scrittura all'istanza principale. L'utilizzo replicaSet=rs0 nella stringa di connessione consente al driver MongoDB di mantenere una visualizzazione aggiornata automaticamente della topologia del cluster, consentendo alle applicazioni di mantenere la visibilità delle configurazioni correnti dei nodi man mano che le istanze vengono aggiunte o rimosse. La mancata fornitura di queste opzioni o la mancata specificazione readPreference=primary invia tutte le letture e le scritture all'istanza principale. Per ulteriori opzioni perreadPreference, vedere. Leggi le opzioni di preferenza

Scrivi preoccupazioni e scrivi un diario

La preoccupazione relativa alla scrittura determina il livello di riconoscimento richiesto al database per le operazioni di scrittura. I driver MongoDB offrono un'opzione per ottimizzare i file di richiesta di scrittura e di diario. Amazon DocumentDB non prevede che tu imposti write concern e journal e ignora i valori inviati per and j (wand)writeConcern. journal DocumentDB scrive sempre i dati conwriteConcern: majority andjournal: true quindi le scritture vengono registrate in modo duraturo sulla maggior parte dei nodi prima di inviare una conferma al client.

RetryWrites

retryWrites=false— DocumentDB non supporta le scritture riutilizzabili e pertanto questo attributo deve essere sempre impostato su. false

Autenticazione IAM

authSource=%24externale authMechanism=MONGODB-AWS — Questi due parametri vengono utilizzati per l'autenticazione tramite. AWS Identity and Access Management L'autenticazione IAM è attualmente disponibile solo nella versione 5.0 del cluster basata su istanze. Per ulteriori informazioni, consulta Autenticazione tramite identità IAM.

Pool di connessioni

Queste opzioni sono disponibili per il pool di connessioni:

  • maxPoolSize— Imposta il numero massimo di connessioni che possono essere create nel pool. Quando tutte le connessioni sono in uso e arriva una nuova richiesta, attende che una connessione diventi disponibile. L'impostazione predefinita per i driver Java MongoDB è 100.

  • minPoolSize— Indica il numero minimo di connessioni che devono essere mantenute nel pool in ogni momento. L'impostazione predefinita per i driver Java MongoDB è 0.

  • maxIdleTimeMS— Determina per quanto tempo una connessione può rimanere inattiva nel pool prima di essere chiusa e rimossa. L'impostazione predefinita per i driver Java MongoDB è 100 millisecondi.

  • waitQueueTimeoutMS— Configura per quanto tempo un thread deve attendere prima che una connessione diventi disponibile quando il pool raggiunge la dimensione massima. Se una connessione non diventa disponibile entro questo periodo, viene generata un'eccezione. Il valore predefinito per i driver Java MongoDB è 120.000 millisecondi (2 minuti).

Parametri di timeout della connessione

Il timeout è un meccanismo per limitare il periodo di tempo necessario a un'operazione o a un tentativo di connessione prima che venga considerato fallito. I seguenti parametri di timeout sono disponibili per prevenire attese indefinite e gestire l'allocazione delle risorse:

  • connectTimeoutMS— Configura il tempo di attesa del driver per stabilire una connessione al cluster. L'impostazione predefinita è 10.000 millisecondi (10 secondi).

  • socketTimeoutMS— Speciifica per quanto tempo il driver aspetterà una risposta dal server per un'operazione non di scrittura. L'impostazione predefinita è 0, (nessun timeout o infinito).

  • serverSelectionTimeoutMS— Specificare quanto tempo il driver aspetterà per trovare un server disponibile nel cluster. Il valore predefinito per questa impostazione è 30 secondi ed è sufficiente per eleggere una nuova istanza primaria durante il failover.

Fase 3: Scrivere il codice di connessione

Il seguente esempio di codice mostra come effettuare una connessione TLS ad 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); } }

Fase 4: Gestire le eccezioni di connessione

Quando si lavora con DocumentDB in applicazioni Java, la gestione delle eccezioni di connessione è fondamentale per mantenere operazioni di database solide e affidabili. Gestite correttamente, queste eccezioni non solo aiutano a diagnosticare rapidamente i problemi, ma garantiscono anche che l'applicazione sia in grado di gestire correttamente le interruzioni temporanee della rete o l'indisponibilità del server, con conseguente miglioramento della stabilità e dell'esperienza utente. Alcune delle eccezioni critiche relative alla creazione di una connessione includono:

  • MongoException— Un'eccezione generale che potrebbe essere emessa in vari scenari non coperti da eccezioni più specifiche. Assicurati che questa eccezione venga gestita dopo tutte le altre eccezioni specifiche poiché si tratta di un'eccezione catch-all MongoDB generale.

  • MongoTimeoutException— Emesso in caso di timeout di un'operazione. Ad esempio, interrogando un endpoint del cluster inesistente.

  • MongoSocketException— Rilasciato per problemi relativi alla rete. Ad esempio, disconnessione improvvisa della rete durante un'operazione.

  • MongoSecurityException— Emesso quando l'autenticazione fallisce. Ad esempio, connessione con credenziali errate.

  • MongoConfigurationException— Emesso in caso di errore nella configurazione del client. Ad esempio, utilizzando una stringa di connessione non valida.

Fase 5: Esecuzione del codice

Il seguente esempio di codice crea una connessione Amazon DocumentDB e stampa tutti i database:

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); } }

Le migliori pratiche di connessione

Di seguito sono riportate le best practice da considerare quando ci si connette ad Amazon DocumentDB con un driver Java MongoDB:

  • Chiudi sempre il tuo MongoClientquando non hai più bisogno che il client rilasci risorse.

  • Gestisci le eccezioni in modo appropriato e implementa una corretta registrazione degli errori.

  • Utilizza variabili di ambiente o AWS Secrets Manager per archiviare informazioni sensibili come nomi utente e password.