MongoSocketReadException: Fin de stream atteint prématurément (après une période d’inactivité)

Je reçois cette erreur lors d’un appel de find (pilote Java par défaut) après une période d’inactivité. J’ai essayé d’append une pulsation manuelle (écrire dans une collection limitée), mais cela n’a pas aidé. Je ne reçois le problème que lorsque je suis connecté à une instance sur composition (c.-à-d. Pas dans un contexte local)

La version de MongoDB est la version 3.2.8, dernier pilote (3.3), utilisant Java 8.

Une idée ?

Je suis d’accord avec la réponse de Rhangaun, voici ma réponse au code de JAVA:

  public static DB getMongoDB() { MongoClientOptions.Builder builder = new MongoClientOptions.Builder(); //build the connection options builder.maxConnectionIdleTime(60000);//set the max wait time in (ms) MongoClientOptions opts = builder.build(); char[] password2 = "mypassword".toCharArray(); MongoCredential credential2 = MongoCredential.createCredential("username", "databasename",password2); //add your option to the connection MongoClient mongoClient = new MongoClient(new ServerAddress("server ip",27017), Arrays.asList(credential2),opts); //use your database cachedDb = mongoClient.getDB("databasename"); return cachedDb; } 

Voici mon lien de recherche: http://3t.io/blog/how-to-prevent-your-connection-from-dropping-with-hosted-mongodb-instances/

J’espère que ça vous aide.

Je l’ai trouvé dans une documentation:

Pour les applications de longue durée, il est souvent prudent d’activer “keepAlive” avec un nombre de millisecondes. Sans cela, après un certain temps, vous risquez de voir apparaître des erreurs “Connexion fermée” sans aucune raison.

Vérifiez si cela aide. Lorsque vous vous connectez à mongoDB, vous pouvez lui transmettre des options de socket. Je viens du fond de noeud, nous utilisons les options suivantes pour le garder en vie.

 server: { socketOptions: { keepAlive: 100, connectTimeoutMS: 30000 } } 

J’espère que cela t’aides!!

Je résous ce problème en définissant sslEnabled sur true, exemple de code:

 @Bean public MongoClient mongoClient() { List saList = new ArrayList<>(); saList.add(new ServerAddress("cluster0-shard-00-00-75shm.gcp.mongodb.net", 27017)); saList.add(new ServerAddress("cluster0-shard-00-01-75shm.gcp.mongodb.net", 27017)); saList.add(new ServerAddress("cluster0-shard-00-02-75shm.gcp.mongodb.net", 27017)); char[] pwd = "password".toCharArray(); MongoCredential credential = MongoCredential.createCredential("username", "admin", pwd); //set sslEnabled to true here MongoClientOptions options = MongoClientOptions.builder() .readPreference(ReadPreference.primaryPreferred()) .retryWrites(true) .requiredReplicaSetName("Cluster0-shard-0") .maxConnectionIdleTime(6000) .sslEnabled(true) .build(); MongoClient mongoClient = new MongoClient(saList, credential, options); return mongoClient; } 

Addition: mon fichier client est org.mongodb.mongodb-driver 3.6.4, le serveur est mongodb atlas M0 3.6.6 sur GCP