title: dubbo 源码分析 5
date: 2020/06/03 10:22
本节内容
我们从这节开始将分析 Dubbo 集群容错方面的源码。
集群容错源码包含四个部分,分别是服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance。
本节先说一下服务目录(Directory)
注:这部分我应该就不会跟着写了。
服务目录

还记得这个调用链(服务调用时调用)吧,我们今天先看一下 FailoverClusterInvoker。
当服务消费者调用服务提供者的时候:
注意:下面讲的都是服务消费者对于 Directory 的操作。服务提供者对 Directory 的操作无非是向目录中写点数据。





那么问题来了,methodInvokerMap 中的数据是怎么放进去的呢
RegistryDirectory 是一个动态服务目录,会随注册中心配置的变化进行动态调整。因此 RegistryDirectory 实现了 NotifyListener 接口,通过这个接口获取注册中心变更通知。
一个 RefrenceBean 对象对应着一个 Directory 对象,当 RefrenceBean 对象对应的 zookeeper 目录数据变更就会出触发这个监听器



tag1 toInvokers(invokerUrls);


拼接后的 url 并不是最终请求的地址,截图中写错了,目前来看他只是作为了 invoker 们的 key。
tag2 toMethodInvokers(newUrlInvokerMap);

现在知道 methodInvokerMap 中的数据是怎么来的了吧,结束了
网友评论