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

  这周一碰到了一个生产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秒),经过一调试测试后发现就不再出现那个报错了!!!

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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐