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

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

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

任何想法 ?

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

希望它能帮到你。

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

对于长时间运行的应用程序,通常谨慎地启用“keepAlive”数毫秒。 没有它,经过一段时间后,您可能会开始看到“连接已关闭”错误,这似乎是没有理由的。

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

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

希望这可以帮助!!

我通过将sslEnabled设置为true解决了这个问题,代码示例:

 @Bean public MongoClient mongoClient() { List saList = new ArrayList<>(); saList.add(new ServerAddress("cluster0-shard-00-00-75shm.gcp.mongodb.net", 27017)); saList.add(new ServerAddress("cluster0-shard-00-01-75shm.gcp.mongodb.net", 27017)); saList.add(new ServerAddress("cluster0-shard-00-02-75shm.gcp.mongodb.net", 27017)); char[] pwd = "password".toCharArray(); MongoCredential credential = MongoCredential.createCredential("username", "admin", pwd); //set sslEnabled to true here MongoClientOptions options = MongoClientOptions.builder() .readPreference(ReadPreference.primaryPreferred()) .retryWrites(true) .requiredReplicaSetName("Cluster0-shard-0") .maxConnectionIdleTime(6000) .sslEnabled(true) .build(); MongoClient mongoClient = new MongoClient(saList, credential, options); return mongoClient; } 

另外:我的客户端jar是org.mongodb.mongodb-driver 3.6.4,服务器是mongodb atlas M0 3.6.6 on GCP