dubbo源码解析
创始人
2025-05-28 10:48:04

一、Dubbo扩展机制SPI

dubbo有大量的spi扩展实现,包括协议扩展、调用拦截扩展、路由扩展等26个扩展,并且spi机制运用到了各个模块设计中。所以我打算先讲解dubbo的扩展机制spi。

JDK的SPI思想

SPI的全名为Service Provider Interface,面向对象的设计里面,模块之间推荐基于接口编程,而不是对实现类进行硬编码,这样做也是为了模块设计的可拔插原则。为了在模块装配的时候不在程序里指明是哪个实现,就需要一种服务发现的机制,jdk的spi就是为某个接口寻找服务实现。jdk提供了服务实现查找的工具类:java.util.ServiceLoader,它会去加载META-INF/service/目录下的配置文件

二、注册中心

dubbo/multicast/redis/zookeeper

zookeeper

因为dubbo是一个分布式的RPC开源框架,各个服务之间单独部署,就会出现资源之间不一致的问题。而zookeeper就有保证分布式一致性的特性。ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务。关于dubbo为什么会推荐使用zookeeper作为它的注册中心实现,有很多书籍以及博客讲解了zookeeper的特性以及优势,这不是本章的重点,我要讲的是zookeeper的数据结构,dubbo服务是如何被zookeeper的数据结构存储管理的,因为这影响到下面源码的解读。zookeeper采用的是树形结构来组织数据节点,它类似于一个标准的文件系统。先来看看下面这张图:

展示了dubbo在zookeeper中存储的形式以及节点层级,

  1. dubbo的Root层是根目录,通过的“group”来设置zookeeper的根节点,缺省值是“dubbo”。

  1. Service层是服务接口的全名。

  1. Type层是分类,一共有四种分类,分别是providers(服务提供者列表)、consumers(服务消费者列表)、routes(路由规则列表)、configurations(配置规则列表)。

  1. URL层:根据不同的Type目录:可以有服务提供者 URL 、服务消费者 URL 、路由规则 URL 、配置规则 URL 。不同的Type关注的URL不同。

zookeeper以每个斜杠来分割每一层的znode,比如第一层根节点dubbo就是“/dubbo”,而第二层的Service层就是/com.foo.Barservice,zookeeper的每个节点通过路径来表示以及访问,例如服务提供者启动时,向/dubbo/com.foo.Barservice/providers目录下写入自己的URL地址

三、远程通信

Transport层

Exchange层

buffer

Telnet

Grizzly

Http

Mina

Netty3

Netty4

Zookeeper

远程调用

Filter

Listener

Protocol

Proxy

dubbo协议/hessian协议/http协议/memcached协议/redis协议/rest协议/thrift协议/webservice协议/

集群

cluster

configurator

directory

loadbalance

merger

router

mock

服务暴露

服务引用

异步化改造

相关内容

热门资讯

朴朴超市进入线下开店:做流量,... 交流朴朴超市,实名添加微信lihua759321进群继叮咚买菜、小象超市后,前置仓生鲜赛道的另一大玩...
直面不确定性:中国银行业于挑战... 全文共4585字,阅读全文约需14分钟直面不确定性:中国银行业于挑战中寻成长(附21世纪金融年会议程...
国产替代与数字化转型下 中证软... 《金证研》 巽风/作者近日,国务院办公厅印发《关于加快场景培育和开放推动新场景大规模应用的实施意见》...
港股突发!刚刚,重大调整! 港... 11月21日晚间消息,恒生指数公司发布季检结果,多个指数的成份股将有调整。根据公告,恒生科技指数纳入...
欧盟脸丢大了,27打1告败,俄... 俄乌冲突丢脸的不是乌克兰,而应该是欧盟,数量上是27打1,俄罗斯还一直被各种制裁,结果乌克兰的领土却...