在一段不活动时间后,我在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