2016-08-22 27 views
9

在一段不活動時間後,我在find調用(默認Java驅動程序)上收到此錯誤。我試圖添加手動心跳(寫入加蓋的集合),但它沒有幫助。在連接到撰寫實例時(即不在本地上下文中),我只會遇到問題。MongoSocketReadException:提前到達流的末尾(經過一段時間不活動之後)

MongoDB的版本是3.2.8,最新的驅動程序(3.3),使用Java 8

任何想法?

+0

我發現'MongoClientOptions'的'isSocketKeepAlive'標誌默認是'false',我將其更改爲true,現在我正在等待查看是否再次出現錯誤。 – Rhangaun

+6

不幸的是,用.socketKeepAlive(true),我們也得到這個錯誤,我的驅動版本是3.0.4 – Feng

+0

你能找到最後的原因嗎?我現在面對這個錯誤 – Narges

回答

1

我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/

希望它可以幫助你。

+0

我使用這個構造函數來建立連接,但總是得到異常:MongoClient mongoClient =新的MongoClient(新的ServerAddress(「203.11.83.230」,27017),Arrays.asList(憑證2))我改變與MongoClientOptions不同的一切一切工作正常 – Daqian

12

,我發現它的一些文檔中:

對於長時間運行的應用程序,它往往是審慎的,以使「的keepAlive」用的毫秒數。沒有它,在一段時間後,你可能會開始看到「連接關閉」錯誤,因爲沒有理由。

檢查是否有幫助。當你連接到mongoDB時,你可以將套接字選項傳遞給它。我從節點背景我們使用以下選項來保持它活着。

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

希望這有助於!

相關問題