记一次dubbo异步调用超时的bug

背景:
最近线上某个接口时不时会报超时,观察一段时间发现,只要provider处理业务超过1秒该现象就会重现(实际超时时间设置为20秒)。不管怎么看代码和超时配置都没有问题。

解决:
开发环境还原场景,provider强制睡眠3秒,在客户端debug。
经过一天的摸索,发现原来是dubbo异步本身的bug。在代码中设置了超时时间,但是单位是秒,会被重置为默认值1s。

不再多说了,直接上代码演示
provider使用的dubbo版本为2.5.3
在这里插入图片描述
客户端通过异步方式获取消息。
在这里插入图片描述
当设置future.get(5, TimeUnit.SECONDS)时,会出现转换错误。
如下图,当超时单位不为毫秒时,timeoutInMillis恒等于0。
这使得设置的timeout不生效,超时时间会走默认的1000ms。
在这里插入图片描述
最后总结一下:
dubbo超时机制优先级:
客户端方法级>服务端方法级>客户端接口级>服务端接口级>客户端全局>服务端全局
测试还发现:
若xml设置5s,get设置2s则以get为准
若xml设置2s,get设置5s则以xml为准
若get不设置,默认以xml为准。
若全不设置,默认1000ms。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值