《Apache Dubbo微服务开发从入门到精通》——迁移到 Dubbo3——二、 迁移到应用级服务发现(7) https://developer.aliyun.com/article/1223581
5) 切换过程说明
地址迁移过程中涉及到了三种状态的切换,为了保证平滑迁移,共有6条切换路径需要支持,可以总结为从强制接口级、强制应用级往应用级优先切换;应用级优先往强制接口级、强制应用级切换;还有强制接口级和强制应用级互相切换。
对于同一接口切换的过程总是同步的,如果前一个规则还未处理完就收到新规则则回进行等待。
a) 切换到应用级优先
从强制接口级、强制应用级往应用级优先切换本质上是从某一单订阅往双订阅切换,保留原有的订阅并创建另外一种订阅的过程。这个切换模式下规则体中配置的delay配置不会生效,也即是创建完订阅后马上进行阈值探测并决策选择某一组订阅进行实际优先调用。由于应用级优先模式是支持运行时动态进行阈值探测,所以对于部分注册中心无法启动时即获取全量地址的场景在全部地址通知完也会重新计算阈值并切换。
应用级优先模式下的动态切换是基于服务目录(Directory)的地址监听器实现的。
b) 应用级优先切换到强制
应用级优先往强制接口级、强制应用级切换的过程是对双订阅的地址进行检查,如果满足则对另外一份订阅进行销毁,如果不满足则回滚保留原来的应用级优先状态。
如果用户希望这个切换过程不经过检查直接切换可以通过配置force参数实现。
c) 强制接口级和强制应用级互相切换
强制接口级和强制应用级互相切换需要临时创建一份新的订阅,判断新的订阅(即阈值计算时使用新订阅的地址数去除旧订阅的地址数)是否达标,如果达标则进行切换,如果不达标会销毁这份新的订阅并且回滚到之前的状态。