报错信息如下:

[2023-01-04 13:36:02.185]-ERROR-[biz:aplus-task-oms1060189862335877121][sys:aplus-cms-tran1060189866052390912][com.phfund.aplus.cms.tran.module.counter.service.impl.OcrServiceImpl-102][调用远程服务发送文件异常:] cn.hutool.http.HttpException: Error writing to server at cn.hutool.http.HttpResponse.init(HttpResponse.java:423) at cn.hutool.http.HttpResponse.initWithDisconnect(HttpResponse.java:396) at cn.hutool.http.HttpResponse.+init+(HttpResponse.java:76) at cn.hutool.http.HttpRequest.execute(HttpRequest.java:966) at cn.hutool.http.HttpRequest.execute(HttpRequest.java:930) at com.phfund.aplus.cms.tran.module.counter.service.impl.OcrServiceImpl.sendDataToOcr(OcrServiceImpl.java:82)

分析

排查出该报错为外调其他系统时发生,当传入参数数据过大(10M左右)就会必现

工具类

开始以为是hutool工具类发送请求参数过大的问题,换成apache自带的HTTP工具类,结果依然出现报错 报错如下:

Connection reset by peer: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.6.0_43] at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) ~[na:1.6.0_43] at java.net.SocketOutputStream.write(SocketOutputStream.java:136) ~[na:1.6.0_43]

请求方

初步猜测是请求方将数据上传给服务端时写入有误 1、是不是请求方HTTP链接时间过短,导致数据还没有传递完就断开了。所以设置了HTTP超时时间为30s,测试仍旧会报错。 2、或许请求方还有别的设置有问题,现在换了一个本地的服务发送同样的数据,发现成功了,所以现在开始怀疑的服务方的问题 3、用POSTMAN发送请求到服务方,报错一致,更加坚定是服务方的问题

服务方

果然在服务方有报错:

01-04 16:26:54.443 ERROR [c.d.a.framework.boot.error.RestExceptionTranslator] - 消息不能读取 01-04 16:26:54.451 ERROR [c.d.a.framework.boot.error.RestExceptionTranslator] - 消息不能读取 01-04 16:26:54.460 ERROR [c.d.a.framework.boot.error.RestExceptionTranslator] - 消息不能读取 01-04 16:26:54.471 ERROR [c.d.a.framework.boot.error.RestExceptionTranslator] - 消息不能读取

接收请求的buffer设置得有点小,然后关闭了TCP连接,请求方没拿到HTTP报错返回,再继续写TCP连接得时候,遇到了关闭TCP得错误,所以打了这个日志 查询资料,发现springboot在接收文件和request请求时,会设置默认的大小,参数如下: 将maxRequestSize调大,测试,可行

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: