dubbo优雅下线分析
问题背景我们微服务之间的远程调用使用的是dubbo框架(版本2.4.9),在最近几次服务的发布中,我们发现在dubbo provider服务的重启过程中,如果此时正处于业务的高峰期,短时间内会有大量的rpc调用失败,如果consumer侧没有重试机制或本地兜底策略的话,很可能导致业务异常。
为了解决上述问题,我们有必要知道我们服务上下线过程中,dubbo究竟做了哪些事情。
服务上线首先看在上线过程中,dubbo是如何做到服务的注册和发现的。dubbo的架构如下图:
对于provider,dubbo会监听Spring容器的启动刷新事件(ContextRefreshedEvent),调用export()方法暴露服务。在使用zk作为注册中心的前提下,export()方法按顺序做下面3件事。
URL装配:读取provider端配置,根据约定好的协议将服务装配成URL的形式
协议暴露:所谓协议暴露,简单来说就是先创建NettyServer,然后给每个URL创建一个本地方法的代理,并将二者映射起来,NettyServer接收请求会调用对应的本地方法
向z
...