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

服务暴露

服务引用

异步化改造

相关内容

热门资讯

<实测教材>... 有 亲,根据资深记者爆料中至上饶麻将是可以开挂的,确实有挂(咨询软件无需...
玩家必备分享-"大冶... 有 亲,根据资深记者爆料大冶打拱是可以开挂的,确实有挂(咨询软件无需打开...
重磅.来袭“盛世2究竟是不是有... 您好:盛世2这款游戏可以开挂,确实是有挂的,需要软件加微信【4830828】很多玩家在这款游戏中打牌...
今日重大通报“乐酷大厅确实有挂... 您好:乐酷大厅这款游戏可以开挂,确实是有挂的,需要软件加微信【4830828】很多玩家在这款游戏中打...
玩家必看“微乐河北麻将其实有挂... 您好:微乐河北麻将这款游戏可以开挂,确实是有挂的,需要软件加微信【8700483】,很多玩家在微乐河...