在一段不活動時間後,我在find
調用(默認Java驅動程序)上收到此錯誤。我試圖添加手動心跳(寫入加蓋的集合),但它沒有幫助。在連接到撰寫實例時(即不在本地上下文中),我只會遇到問題。MongoSocketReadException:提前到達流的末尾(經過一段時間不活動之後)
MongoDB的版本是3.2.8,最新的驅動程序(3.3),使用Java 8
任何想法?
在一段不活動時間後,我在find
調用(默認Java驅動程序)上收到此錯誤。我試圖添加手動心跳(寫入加蓋的集合),但它沒有幫助。在連接到撰寫實例時(即不在本地上下文中),我只會遇到問題。MongoSocketReadException:提前到達流的末尾(經過一段時間不活動之後)
MongoDB的版本是3.2.8,最新的驅動程序(3.3),使用Java 8
任何想法?
我Rhangaun的答案達成一致,這裏是我的JAVA代碼soluction:
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;
}
這裏是我的研究鏈接:http://3t.io/blog/how-to-prevent-your-connection-from-dropping-with-hosted-mongodb-instances/
希望它可以幫助你。
我使用這個構造函數來建立連接,但總是得到異常:MongoClient mongoClient =新的MongoClient(新的ServerAddress(「203.11.83.230」,27017),Arrays.asList(憑證2))我改變與MongoClientOptions不同的一切一切工作正常 – Daqian
,我發現它的一些文檔中:
對於長時間運行的應用程序,它往往是審慎的,以使「的keepAlive」用的毫秒數。沒有它,在一段時間後,你可能會開始看到「連接關閉」錯誤,因爲沒有理由。
檢查是否有幫助。當你連接到mongoDB時,你可以將套接字選項傳遞給它。我從節點背景我們使用以下選項來保持它活着。
server: {
socketOptions: {
keepAlive: 100,
connectTimeoutMS: 30000
}
}
希望這有助於!
我發現'MongoClientOptions'的'isSocketKeepAlive'標誌默認是'false',我將其更改爲true,現在我正在等待查看是否再次出現錯誤。 – Rhangaun
不幸的是,用.socketKeepAlive(true),我們也得到這個錯誤,我的驅動版本是3.0.4 – Feng
你能找到最後的原因嗎?我現在面對這個錯誤 – Narges