dubbo源码解析-详解directory

前言

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

直入主题

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

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

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

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

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

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

本文介绍的重点是RegistryDirectory

首先来看看他的继承结构

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

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

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

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

写在末尾

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

作者:肥朝 链接:https://www.jianshu.com/p/3d47873f8ad3

原文发布于微信公众号 - java进阶架构师(java_jiagoushi)

原文发表时间:2018-08-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木头编程 - moTzxx

小程序 微信退款功能实现讲解 (PHP方式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

4772
来自专栏mwangblog

Linux简单介绍

1345
来自专栏携程技术中心

干货 | 分布式架构系统生成全局唯一序列号的一个思路

作者简介 丁宜人,10年java开发经验。携程技术中心基础业务研发部用户中心资深java工程师,负责携程账号的基础服务和相关框架组件研发。之前在惠普公司供职6年...

54910
来自专栏IT派

10 个技巧,让你更专业地使用 console 进行 JS 调试

首先,我必须承认这一点,我将利用这个平台从我的开发环境中清理出骨架(轮廓)。有时候,我所做的“魔法”(有些人称之为“编码”),并不像我的同事在为他们展示这些宏伟...

1070
来自专栏张善友的专栏

如何从VS2003升级到VS2008

直接使用VS2008打开VS2003的Web项目,提示转换项目,开始转换项目,转换完的结果可能就不是你想要的了,VS2008把它给转换成WebSite模型了,像...

2019
来自专栏Golang语言社区

转-Golang分布式设计模式之-----分层设计

提到分布式系统,我们会想到很多机器,分别部署着各自的服务,然后整体组成一个分布式系统。在这类系统中,分布式系统与常规的集中式系统存在着以下三个区别。(来自分布...

42313
来自专栏FreeBuf

挖洞经验 | 看我如何利用上传漏洞在PayPal服务器上实现RCE执行

当你看到这篇文章标题时,是不是很吃惊,PayPal服务器的RCE漏洞?Dafaq?WTF?真的吗?这当然是真的,很幸运,我通过枚举和域名查找方法发现了该漏洞。 ...

3935
来自专栏华仔的技术笔记

iOS应用架构谈 本地持久化方案及动态部署

嗯,你们要的大招。跟着这篇文章一起也发布了CTPersistance和CTJSBridge这两个库,希望大家在实际使用的时候如果遇到问题,就给我提issue或者...

4057
来自专栏小狼的世界

基于Mapabc API的周边查询应用

现在,越来越多的 Location Based 应用,或者Geolocation的应用出现在网络、手机等各种各样的终端上,为人们的日常生活、出行和工作都提供了不...

1022
来自专栏CDN及云技术分享

我是怎么一步步用go找出压测性能瓶颈

笔者要在线上服务器load日志并且重放来测一些机器性能指标。模拟机器资源比较少,相对的被模拟的线上机器日志量大,假设线上单机qps有1w,那么5台机器组成的集群...

1.8K35

扫码关注云+社区

领取腾讯云代金券