SpringCloud Alibaba系列——13Dubbo的服务治理和监听机制(下)
作者 | 一起撸Java
来源 |今日头条
第3章 动态路由的监听
3.1 监听注册
3.1.1 说明
动态路由这块我们只分析条件动态路由,也是要根据dubbo-admin服务治理的方式去修改路由配置,然后在运行时作用到调用流程中去。我们去看看dubbo-admin中如何去修改一个动态路由。我们以读写分离路由为例去配置,关于动态路由配置规则,请参照dubbo官网的路由配置规则:
https://dubbo.apache.org/zh/docs/advanced/routing-rule/
保存后我们看看zookeeper的变化
1、在routers节点多了一个route协议节点2、分布式配置config节点下新增了节点3.1.2 源码分析
routers节点下的监听之前已经分析过,我这里就不分析了,我们主要来分析一下config节点下的监听注册逻辑。
还是在RegistryProtocol的refer作为入口,最终来到
directory.buildRouterChain(urlToRegistry);在这行代码这里完成了路由的监听
最终代码会走到
在这行代码这里完成了注册流程,注册跟之前是一样的就不细看了3.2 监听触发
3.2.1 说明
当我们写节点时就会触发事件
3.2.2 源码分析
当触发了事件时,一样的会走到CacheListener类中,然后根据path后去到path对应的监听回调类,该类就是ServiceRouter我们看看该类的process逻辑
这里是解析配置规则,然后根据配置规则生成路由规则类,这里就生成了两个条件路由规则类那么这个规则类最终是如何进行路由的呢?
其实说白了,就是在调用过程中,当我们获取到服务列表的时候,对这个服务列表进行条件路由规则的过滤,过滤剩下的invoker对象才是我们需要调用的invoker对象。
那我们来看看调用流程
在doList方法中就会根据路由规则来路由了,我们看看doList逻辑
invokers = routerChain.route(getConsumerUrl(), invocation);这行代码就是根据路由规则路由的。
最终会走到ServiceRouter中,根据事件触发后生成的两个条件路由规则来进行路由匹配。
路由匹配规则就是根据你的配置信息来进行一一匹配,这块逻辑同学们可以自己去看,这里就不分析了,路由还算是比较容易看懂的。