【IO异常】HTTP请求报错Error writing to server

报错信息如下:

[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调大,测试,可行

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值