程序员社区

dubbo 源码分析 5


title: dubbo 源码分析 5
date: 2020/06/03 10:22


本节内容

我们从这节开始将分析 Dubbo 集群容错方面的源码。

集群容错源码包含四个部分,分别是服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance。

本节先说一下服务目录(Directory)

注:这部分我应该就不会跟着写了。

服务目录

dubbo 源码分析 5插图

还记得这个调用链(服务调用时调用)吧,我们今天先看一下 FailoverClusterInvoker。

当服务消费者调用服务提供者的时候:

注意:下面讲的都是服务消费者对于 Directory 的操作。服务提供者对 Directory 的操作无非是向目录中写点数据。

dubbo 源码分析 5插图1
dubbo 源码分析 5插图2
dubbo 源码分析 5插图3
dubbo 源码分析 5插图4
dubbo 源码分析 5插图5

那么问题来了,methodInvokerMap 中的数据是怎么放进去的呢

RegistryDirectory 是一个动态服务目录,会随注册中心配置的变化进行动态调整。因此 RegistryDirectory 实现了 NotifyListener 接口,通过这个接口获取注册中心变更通知。

一个 RefrenceBean 对象对应着一个 Directory 对象,当 RefrenceBean 对象对应的 zookeeper 目录数据变更就会出触发这个监听器

dubbo 源码分析 5插图6
dubbo 源码分析 5插图7
dubbo 源码分析 5插图8

tag1 toInvokers(invokerUrls);

dubbo 源码分析 5插图9
dubbo 源码分析 5插图10

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

tag2 toMethodInvokers(newUrlInvokerMap);

dubbo 源码分析 5插图11
获取当前接口拥有的所有方法(通过 url),装入 map 中

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

赞(0) 打赏
未经允许不得转载:IDEA激活码 » dubbo 源码分析 5

一个分享Java & Python知识的社区