Dubbo优雅停机原理

858 阅读2分钟

关注可以查看更多粉丝专享blog~

Dubbo优雅停机原理解析

  1. 收到kill -9进程退出信号,Spring容器会触发容器销毁事件。
  2. provider端会取消注册服务元数据信息。
  3. consumer端会收到最新的地址列表(不包含准备停机的地址)。
  4. Dubbo协议会发送readonly事件报文通知consumer服务不可用。
  5. 服务端等待已经执行的任务结束并拒绝新任务执行。
  6. 最后provider与consumer断开TCP连接。

注册中心已经通知了最新服务列表,provider还要发送readonly报文的原因是,注册中心推送服务可能会由网络延迟,客户端接收和计算服务列表可能占用一些时间。Dubbo协议发送readonly报文时,consumer端会设置响应的provider为不可用,下次负载均衡的时候就不会调用下线的机器了。

Dubbo2.6.3以后修复了优雅停机的一些bug,之前版本中没有做到完全的优雅停机的原因是,Spring和Dubbo都注册了JVM停止的钩子,这种场景下两个线程并发执行的时候可能引用一些销毁的资源,比如Dubbo正在执行的任务需要引用Spring中的Bean,但这时Spring钩子函数已经关闭了Spring上下文,导致访问任何Spring资源都会报错。

相关文章:

Davids原理探究:Dubbo源码编译(2.7.8)

Davids原理探究:Dubbo SPI和Java SPI实现原理

Davids原理探究:Dubbo注册中心(ZooKeeper、Redis)实现原理

Davids原理探究:Dubbo配置解析原理

Davids原理探究:Dubbo服务暴露原理

Davids原理探究:Dubbo服务消费原理

Davids原理探究:Dubbo优雅停机原理解析

Davids原理探究:Dubbo调用流程图

Davids原理探究:Dubbo路由实现原理

Davids原理探究:Dubbo负载均衡实现原理

Davids原理探究:Dubbo过滤器原理