2016-08-22 1 views
9

Ich bekomme diesen Fehler auf einen find Aufruf (Standard-Java-Treiber) nach einem Zeitraum der Inaktivität. Ich habe versucht, einen manuellen Herzschlag hinzuzufügen (Schreiben in eine Capped-Sammlung), aber es hat nicht geholfen. Ich bekomme das Problem nur, wenn ich mit einer Instanz auf Compose verbunden bin (d. H. Nicht in einem lokalen Kontext).MongoSocketReadException: Vorzeitig erreicht Ende des Streams (nach einem Zeitraum der Inaktivität)

MongoDB-Version ist 3.2.8, den neuesten Treiber (3.3) mit Hilfe von Java 8.

Jede Idee?

+0

Ich habe herausgefunden, dass das 'isSocketKeepAlive'-Flag der' MongoClientOptions' standardmäßig 'false' ist, ich habe es in true geändert und ich warte jetzt, um zu sehen, ob ich den Fehler wieder bekomme. – Rhangaun

+6

leider, mit .socketKeepAlive (true), erhalten wir auch diesen Fehler, meine Laufwerksversion ist 3.0.4 – Feng

+0

könnten Sie endlich den Grund finden? Ich stehe jetzt auf diesen Fehler – Narges

Antwort

1

ich mit Rhangaun Antwort einverstanden ist hier mein soluction in Code von 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; 

} 

Hier ist meine Forschung Link: http://3t.io/blog/how-to-prevent-your-connection-from-dropping-with-hosted-mongodb-instances/

Hoffe, dass es Ihnen hilft.

+0

Ich benutzte diesen Konstruktor, um die Verbindung aber immer aufzubauen bekomme Ausnahme: MongoClient mongoClient = neuer MongoClient (neue ServerAddress ("203.11.83.230", 27017), Arrays.asList (credential2)) Ich habe einen anderen MongoClientOptions-Modus gewählt, alles funktioniert gut für mich – Daqian

12

Ich fand es in einiger Dokumentation:

Für lange laufende Anwendungen, ist es oft sinnvoll ist „Leben“ mit einer Anzahl von Millisekunden zu ermöglichen. Ohne es, nach einiger Zeit, können Sie beginnen, "Verbindung geschlossen" Fehler zu sehen, wie es scheint, keinen Grund.

Überprüfen Sie, ob dies hilft. Wenn du dich mit mongoDB verbindest, kannst du Socket-Optionen an ihn übergeben. Ich bin von Knoten Hintergrund verwenden wir folgende Optionen, um es am Leben zu erhalten.

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

Hoffe, das hilft !!

Verwandte Themen