背景介绍:相同代码,开发环境我们提供的dubbo接口供调用每次没问题,但是测试环境部分接口每次调用一次却发现日志是三次调用或者两次。然后我们开始爬坑。。。
1.我们首先确认了代码完全一直。然后用postman模拟调用,不论是开发还是测试都是一次请求一次调用,完全没问题。
2.消费方:明明页面点击一次调用却又三次调用日志。
分析:通过提供方日志分析:没隔一秒都会被调用一次,这个时候我们怀疑规律有问题开始排查调用方;
调用方日志分析:同一个接口正常的开发环境调用和响应时间间隔两秒多,没有问题。一次调用一次响应。
why:百度学习一波啊。我的天!!!好多人也这样遇到过。好吧。顺带补习下知识乐。
问题解决原理-dubbo超时重连机制
dubbo有这样几个机制
1、如果超时,但是最终返回了正确结果,只是warn,依旧按照正常流程走下去。
2、dubbo:provider 可以设置超时时间 timout,以及如果超时允许被重连的次数 retries
3、dubbo:reference 可以设置超时时间,以及如果超时 timout,允许重连服务的次数 retries
4、dubbo:reference retries 的默认值和consumer一样,而consumer默认为2次
<dubbo:consumer> | retries | default.retries | int | 可选 | 2 |
5、说明客户端的配置优先级高于服务端的优先级。
这就是问题的关键点:看代码,调用方没有默认取dubbo服务时间。这个时间正好就是1秒重连机制。最后我们修改调用方的dubbo接口添加: timout=“60000” retries="0"!!!完美的解决了问题。