Dubbo 源码解析 —— Directory

2019 Java 开发者跳槽指南.pdf (吐血整理)….>>>

Dubbo 源码解析 —— Directory

作者:肥朝 原文地址:http://www.jianshu.com/p/8e007012367e

友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。

友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。

友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。

前言

由于明天还要加班(心疼自己一秒),之前答应过小伙伴每周更新一篇dubbo的源码解析的,鉴于上次讲到了集群容错的总体架构,这次主要讲讲第一个关键词 directory,这个内容不多,比较适合这种时间比较紧的分享.后面还会陆续分享dubbo源码解析系列,但是不止于dubbo.

直入主题

首先来看一下 directory接口的实现类,他主要有两个实现类,一个是 StaticDirectory,一个是 RegistryDirectory

Dubbo 源码解析 —— Directory

其实这个也是道很好的面试题,他还是可以区分三种人

  • 一种是停留在使用层面的,没看过源码的,因此他不会懂得这两个实现类


  • 第二种是看过官网如下描述,因此认为directory的实现类都是动态变化的


Directory 代表多个 Invoker,可以把它看成 List,但与 List 不同的是,它的值可能是动态变化的,比如注册中心推送变更

  • 第三种则是有看过源码的,其实从 StaticDirectory中的 Static关键词来看,就知道,这个其实是不会动态变化的,从下图知道,他的 Invoker是通过构造函数传入, StaticDirectory用得比较少,主要用在服务对多注册中心的引用

Dubbo 源码解析 —— Directory

本文介绍的重点是 RegistryDirectory,首先来看看他的继承结构

Dubbo 源码解析 —— Directory

这个 NotifyListener中的 notify方法就是注册中心的回调,也就是它之所以能根据注册中心动态变化的根源所在.

下面放一个上篇中集群容错的整体架构中的一个图唤醒大家的对 Directory记忆

Dubbo 源码解析 —— Directory

从中可以看出, Directory获取 invoker是从 methodInvokerMap中获取的,从这个图也可以看出,这些主要都是 操作,那它的 操作是在什么时候写的呢?就是在回调方法 notify的时候操作的

Dubbo 源码解析 —— Directory

Dubbo 源码解析 —— Directory

也就是注册中心有变化,则更新 methodInvokerMapurlInvokerMap的值(这个后面讲 服务引用原理的时候会再提一下),这就是官网提到的 它的值可能是动态变化的,比如注册中心推送变更的原因所在.

写在末尾

上一篇集群容错的整体架构篇幅较长,可能很多人没什么耐心看下去,所以本篇换成短小精干但是却不缺深度的分享.鉴于本人才疏学浅,不对的地方还望斧正,也欢迎关注我的简书,名称为 肥朝