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

服务暴露

服务引用

异步化改造

相关内容

热门资讯

华汇人寿2025年累计揽收保费... 专为保险业 打造的垂直新媒体平台华汇人寿保险股份有限公司(下称“华汇人寿”)披露2025年第四季度偿...
深夜突发!老牌家电巨头或被*S... 1月30日晚间,老牌家电巨头康佳A(000016.SZ)公告称,预计2025年归母净利润为亏损155...
豫园股份预告2025年业绩亏损... 1月30日,上海豫园旅游商城(集团)股份有限公司(豫园股份,600655.SH)发布2025年年度业...
苏宁易购预计去年净利最高750... 苏宁易购预计连续两年盈利,但去年净利同比大幅下滑。1月30日,苏宁易购集团股份有限公司(ST易购,0...
密集接受券商调研,南网数字:业... 1月29日,南方电网数字电网研究院股份有限公司(证券简称:南网数字,代码:301638)发布公告显示...