1. Dubbo源码环境搭建及项目结构总览
两个事先准备
- Dubbo源码环境的搭建,这里我选择的是2.6.1版本。
- Dubbo文档 https://dubbo.gitbooks.io 、http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
环境搭建
从官方仓库 https://github.com/alibaba/dubbo选中你想要的版本。这里的环境搭建搭建就不多讲。
我们先来看一下Dubbo的架构图
这里有三个角色:
- Registry 注册中心,用于服务的注册与发现,官方推荐Zookeeper,注册中心参考手册
- Provider 服务提供者,通过向 Registry 注册服务
- Consumer 服务消费者,通过从 Registry 发现服务
我们看一下IDE的dubbo-demo项目
- 先启动Zookeeper
- 修改
dubbo-demo-provider.xml
,启动Provider
<!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
- 修改
dubbo-demo-consumer.xml
,启动 Consumer
<!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
我们可以发现Consumer能够远程调用Provider的接口
项目结构总览
1. dubbo-common
dubbo-common
,公共逻辑模块:提供工具类和通用模型
通用模型就是Dubbo整体需要遵守的规范,比如URL、日志等 公共契约
2. dubbo-remoting
dubbo-remoting
,远程通信模块:提供通用的客户端和服务端的通讯功能
我们后面的文章暂时只关心dubbo-remoting-api
、dubbo-remoting-netty4
、dubbo-remoting-zookeeper
。
3. dubbo-rpc
dubbo-rpc
, 远程调用模块:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理,集群相关的管理,由 dubbo-cluster
提供特性。官方推荐Dubbo协议,详见 协议参考手册
4. dubbo-cluster
dubbo-cluster
,集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡, 集群容错,路由,分组聚合等。集群的地址列表可以是静态配置的,也可以是由注册中心下发(由dubbo-registry
提供)。
-
容错:
-
路由:
-
负载均衡:
-
合并结果
-
配置
-
com.alibaba.dubbo.rpc.cluster.Configurator
接口 +com.alibaba.dubbo.rpc.cluster.configurator
包。 - 详见 配置规则
-
整体流程如下:
5. dubbo-registry
dubbo-registry
,注册中心模块:基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。官方推荐Zookeeper,详见 注册中心参考手册
6. dubbo-monitor
dubbo-monitor
,监控模块:统计服务调用次数,调用时间的,调用链跟踪的服务
7. dubbo-config
dubbo-config
,配置模块:是 Dubbo 对外的 API,用户通过 Config 使用Dubbo,隐藏 Dubbo 所有细节。详见 配置设计
dubbo-config-api
,实现了 API 配置 和 属性配置 功能。
dubbo-config-spring
, 实现了 XML 配置 和 注解配置 功能。
8. dubbo-container
dubbo-container
,容器模块,是一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用Web容器去加载服务。详见 服务容器
9. dubbo-filter
dubbo-filter
,过滤器模块:提供了内置的过滤器。
dubbo-filter-cache
,缓存过滤器,详见 结果缓存
dubbo-filter-validation
,参数验证过滤器,详见 参数验证
10. dubbo-plugin
dubbo-plugin
,过滤器模块:提供了内置的插件。详见 新版本 telnet 命令使用说明
11. hessian-lite
hessian-lite
,Dubbo 对 Hessian 2 的 序列化 部分的精简、改进、BugFix 。
12. dubbo-demo
dubbo-demo
,快速启动示例,快速启动
13. dubbo-test
dubbo-test
,测试模块,详见 性能测试报告