解决java.io.IOException: Broken pipe的报错


  又好久没写博客了,说好的每周更新两篇博客的计划又落空了🤣不管了,从这周开始我将会坚持每周更新两篇技术博客,欢迎大家积极监督!好了,废话不多说,下面正式开启我的博客之旅。

  这周一碰到了一个生产bug:拉取京东的第三方账单时居然拉取失败了!当时自己马上去阿里云查看了下生产日志,看到了如下的报错:

**加粗样式**
  从如上的图中,这明显是报了 java.io.IOException: Broken pipe这个错误,第一次见到这个报错的自己有点被整懵圈了,但是拼接着自己过往的经验,自己初步猜测到肯定是哪个网络环节出现超时了😂,为了解决自己的问题,自己百度了下,发现还真有一些哥们也是遇到了跟自己同样的问题,我感觉他们讲得挺好的,在这里引用下他们的话:

出现“Broken pipe ”可能的情况:
1、客户端请求服务器数据,服务器突然挂了;
2、客户端请求服务端数据,服务端正常返回,但客户端由于连接超时或者其他原因断开导致服务端无返回通道导致。

  根据这个老哥所描述的原因,再结合着自己的程序代码进行分析。首先在自己目前的系统中有pay-service和thirdparty-pay-service两个服务,其中pay-service主要是负责业务逻辑的编写, thirdparty-pay-service则主要负责跟第三方平台(如饿了么、京东、美团、微信等等)进行交互。具体流程图如下所示:
在这里插入图片描述
  当时出现的问题是在thirdparty-pay-service请求拉取了京东账单后在返回给pay-service时报了超时,经过仔细排查,终于发现原来是pay-service设的ReadTimeout为30000毫秒(即30秒),但thirdparty-pay-service从请求京东到全部响应回来总共耗了50秒。哈哈,这不报错才怪的呢!所以这也对应了那位老哥所说的第2个原因,即客户端(pay-service)请求服务端数据(thirdparty-pay-service),服务端正常返回,但客户端由于连接超时或者其他原因断开导致服务端无返回通道导致。

  既然都知道了原因,那么就完全可以动手将它解决啦!修改代码后的代码如下所示:
在这里插入图片描述  如上图所示,为了更稳点,于是我将@OpenApiReadTimeout(自定义注解)中的readTimeout值由原先的30000(30秒)直接调成了100000(100秒),经过一调试测试后发现就不再出现那个报错了!!!

  好了,今天的博客就写到这里了。如果大家有什么更好的解决想法,欢迎积极与我讨论!谢谢!

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Melo_FengZhi

您的鼓励对我就是巨大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值