MongoSocketReadException:过早到达流的末尾(一段时间不活动后)

新手上路,请多包涵

在一段时间不活动后,我在 find 调用(默认 Java 驱动程序)时收到此错误。我试图添加一个手动心跳(写入一个上限集合),但它没有帮助。我只在连接到撰写时的实例时遇到问题(即不在本地上下文中)。

MongoDB 版本为 3.2.8,最新驱动程序(3.3),使用 Java 8。

任何想法 ?

原文由 Rhangaun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 272
2 个回答

我同意 Rhangaun 的回答,这是我在 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;

}

这是我的研究链接:http: //3t.io/blog/how-to-prevent-your-connection-from-dropping-with-hosted-mongodb-instances/

希望对你有帮助。

原文由 Daqian 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在一些文档中找到了它:

对于长时间运行的应用程序,以毫秒为单位启用“keepAlive”通常是明智的。没有它,一段时间后你可能会开始看到“连接关闭”错误,这似乎是无缘无故的。

检查这是否有帮助。当您连接到 mongoDB 时,您可以将套接字选项传递给它。我来自节点背景,我们使用以下选项来保持它的活力。

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

希望这可以帮助!!

原文由 Sachin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题