一、该问题的重现步骤是什么?
1. 浏览器一段时间不请求,再次请求有失败几率。重新请求恢复正常,有时候挂着一晚上有好几个刷新token的请求都会失败。
2. 环境是k8s部署的,跟踪了下日志,请求经过了网关到达了具体的服务。
3.看了下,失败时候只有Request Start 没有Response Start,没有异常信息抛出,可以看下面的两张图。
4.目前只在浏览器saber前端发现了这个。用postman暂未发现。试过前几秒用postman正常访问的接口,换了长时间不操作的saber也会超时,前端未改过源码,用原版saber尝试也有这个问题。
5.nginx 提示是499,应该是超时主动断开了连接。
6.大部分出现都是长时间无操作页面情况下,极小几率正常操作时发生。现在目前不能确定是saber前端的问题,还是后端的问题。
7.现在设置了超时后10秒重新请求,可以看到图2 13:39:13 请求无返回,十秒后13:39:25请求就正常返回了
gateway里加了超时5秒断开,发现是转发到具体服务里无返回造成的。
而且自带的接口也有这个现象
先这么试试:
1. 选择几组接口用postman模拟测试
2. 把token过期时间先调整至3天
3. 第一天用postman获取token
4. 第三天携带token,访问曾经出问题的接口
5. 多测试几组,看看是否会有超时的情况
6. 毕竟这是小概率事件,所以需要多做模型采集,进行和saber比对
7. 极小概率发送也有可能是网络波动导致
8. 还有一种办法可以曲线救国,那就是拓展下axios.js的封装,当第一次接口返回超时的时候,再次调用一次,若第二次还是超时则返回错误。这样如果第一次是超时第二次成功,则可以避免这个问题
今天又测试了几次,用postman确实没问题,saber会不定时出现,也很奇怪。
我把undertow换成了tomcat依然有这个问题,对比了下你们体验网站和我们的请求,发现少了keep alive。
怀疑是不是k8s环境下saber的keep alive有问题,postman每次都是新建立连接。
现在暂时解决办法是,gateway层面加上了超时5秒重试,只要是连接超时的报错就自动重试两次,感觉这也不是长久办法。
扫一扫访问 Blade技术社区 移动端