博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongodb报错:com.mongodb.MongoSocketReadException: Exception receiving message
阅读量:2426 次
发布时间:2019-05-10

本文共 4001 字,大约阅读时间需要 13 分钟。

环境版本

mongodb版本:4.0.1mongodb-driver: 3.6.4

问题描述

由于工作需要,线上mongodb中的部分集合需要添加一些新的字段。核心代码如下:

MongoCollection
input = mongoDatabase.getCollection(inputCollection);MongoCollection
output = mongoDatabase.getCollection(outputCollection);FindIterable
findIterable = input.find();MongoCursor
mongoCursor = findIterable.iterator(); while(mongoCursor.hasNext()){ Document outputDocument = new Document(); Document document = mongoCursor.next(); for (String key: document.keySet()) { //......... // 添加字段,具体不列出 } outputDocument.append(key, document.get(key)); } output.insertOne(outputDocument); }

在线上运行一段时间后,程序报出如下异常:

Exception in thread "main" com.mongodb.MongoSocketReadException: Exception receiving message	at com.mongodb.internal.connection.InternalStreamConnection.translateReadException(InternalStreamConnection.java:543)	at com.mongodb.internal.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:428)	at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:289)	at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:255)	at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:99)	at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:444)	at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:72)	at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:200)	at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:269)	at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:131)	at com.mongodb.operation.MixedBulkWriteOperation.executeCommand(MixedBulkWriteOperation.java:418)	at com.mongodb.operation.MixedBulkWriteOperation.executeBulkWriteBatch(MixedBulkWriteOperation.java:256)	at com.mongodb.operation.MixedBulkWriteOperation.access$700(MixedBulkWriteOperation.java:67)	at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:200)	at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:191)	at com.mongodb.operation.OperationHelper.withReleasableConnection(OperationHelper.java:419)	at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:191)	at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:67)	at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:193)	at com.mongodb.client.internal.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:960)	at com.mongodb.client.internal.MongoCollectionImpl.executeInsertOne(MongoCollectionImpl.java:494)	at com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:478)	at com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:472)	at com.zhishen.TestJoin.main(TestJoin.java:83)Caused by: java.net.SocketException: Connection reset	at java.net.SocketInputStream.read(SocketInputStream.java:210)	at java.net.SocketInputStream.read(SocketInputStream.java:141)	at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:89)	at com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:554)	at com.mongodb.internal.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:425)

mongodb server与client建立的连接在出现一些连接失效(比如网络链路突然中断)时,client在默认情况下并不会主动回收这些连接,而当再次读写此连接时就会出现上述错误。

解决方案

MongoClientOptions.Builder builder = new MongoClientOptions.Builder();builder.maxConnectionIdleTime(60000);//set the max wait time in (ms)MongoClientOptions opts = builder.build();

重新打包运行,没有出现异常,问题解决。

转载地址:http://qzjmb.baihongyu.com/

你可能感兴趣的文章
【Java】【web】【计算机网络】session学习总结 2018-9-28
查看>>
【计算机网络】【WEB】DNS域名解析过程(十步走) 2018-9-28
查看>>
【java】【web】Web组件之间的跳转方式 2018-9-29
查看>>
【Java】【web】Servlet的三大作用域对象 2018-8-29
查看>>
【转载】【计算机网络】【TCP】当我们说"TCP是可靠协议"时,我们真正表达的是什么?
查看>>
【Java】【JVM】Java中JVM内存管理 2018-10-5
查看>>
【Java】Java 集合学习总结 2018-10-5
查看>>
【Java】Java序列化学习总结 2018-10-5
查看>>
【web】深入理解负载均衡 2018-10-5
查看>>
交换机和路由器的区别
查看>>
各种服务应用的端口
查看>>
ALL IS WELL《三傻大闹宝莱坞》意味深长的23句经典台词
查看>>
linux环境下安装Java并配置
查看>>
基于Service的简易音乐播放器
查看>>
在android studio中使用genymotion模拟器
查看>>
HttpURLConnection实现多线程网络下载
查看>>
Activity中的onCreate方法不执行问题
查看>>
通过手势去缩放图片
查看>>
Android通过手势实现翻页效果
查看>>
Android保存和识别手势
查看>>