作者:肥朝 原文地址:http://www.jianshu.com/p/8e007012367e
友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。
友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。
友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。
前言
由于明天还要加班(心疼自己一秒),之前答应过小伙伴每周更新一篇dubbo的源码解析的,鉴于上次讲到了集群容错的总体架构,这次主要讲讲第一个关键词
directory
,这个内容不多,比较适合这种时间比较紧的分享.后面还会陆续分享dubbo源码解析系列,但是不止于dubbo.
直入主题
首先来看一下
directory
接口的实现类,他主要有两个实现类,一个是
StaticDirectory
,一个是
RegistryDirectory
其实这个也是道很好的面试题,他还是可以区分三种人
一种是停留在使用层面的,没看过源码的,因此他不会懂得这两个实现类
第二种是看过官网如下描述,因此认为directory的实现类都是动态变化的
第二种是看过官网如下描述,因此认为directory的实现类都是动态变化的
Directory 代表多个 Invoker,可以把它看成 List
本文介绍的重点是
RegistryDirectory
,首先来看看他的继承结构
这个
NotifyListener
中的
notify
方法就是注册中心的回调,也就是它之所以能根据注册中心动态变化的根源所在.
下面放一个上篇中集群容错的整体架构中的一个图唤醒大家的对
Directory
记忆
从中可以看出,
Directory
获取
invoker
是从
methodInvokerMap
中获取的,从这个图也可以看出,这些主要都是
读
操作,那它的
写
操作是在什么时候写的呢?就是在回调方法
notify
的时候操作的
也就是注册中心有变化,则更新
methodInvokerMap
和
urlInvokerMap
的值(这个后面讲
服务引用原理
的时候会再提一下),这就是官网提到的
它的值可能是动态变化的,比如注册中心推送变更
的原因所在.
写在末尾
上一篇集群容错的整体架构篇幅较长,可能很多人没什么耐心看下去,所以本篇换成短小精干但是却不缺深度的分享.鉴于本人才疏学浅,不对的地方还望斧正,也欢迎关注我的简书,名称为
肥朝