2016-08-22 29 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 
     } 
    } 

希望这有助于!

相关问题