排查dubbo接口重复注销问题,我发现了一个巧妙的设计

背景

我在公司内负责自研的dubbo注册中心相关工作,群里经常接到业务方反馈dubbo接口注销报错。经排查,确定是同一个接口调用了两次注销接口导致,由于我们的注册中心注销接口不能重复调用,调用第二次会因为实例已经注销而报实例找不到的错误。

虽然这个报错仅会打印一条错误日志,不影响业务,但本着 follow through的精神,我决定还是一探究竟,更何况重复注销也增加了应用的结束时间,影响了发布回滚速度。

问题复现

拿到业务方的dubbo版本,基于开源2.7.3内部定制的一个版本,该版本修改主要涉及安全漏洞修复以及一些业务适配,写了个demo跑起来,然后kill,发现果然报错了。

为了确定不是内部修改导致的问题,用开源的2.7.3版本再次测试,发现还是报错。

同时为了确定这是一个bug,我将dubbo版本修改为2.7.7做测试,发现该版本不再报错。

说明了重复注销至少是开源dubbo 2.7.3的一个bug,在更高的2.7.7版本中已经被修复。

于是有了解决方案:升级dubbo,但如果这么简单就没有这篇文章了。

  1. 内部的dubbo已经做了修改,想升级得把改动merge到新版本,比较费劲
  2. 就算升级了内部的dubbo版本,也不可能这么快速推动业务方升级

所以应该首先找到bug是哪里导致的,其次看注册中心的扩展是否可以修复这个问题,如果不能修复,就只能在内部的dubbo版本中修复该问题。

问题排查

怀疑ShutdownHook

由于这几天研究过ShutdownHook(见文末《ShutdownHook原理》),第一时间怀疑ShutdownHook可能有问题。

dubbo 2.7.3代码有关ShutdownHook的实现在DubboShutdownHook类,顺着代码梳理出如下关系

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值