背景
Dubbo 作为一款微服务框架,最重要的是向用户提供跨进程的 RPC 远程调用能力。如上图所示,Dubbo 的服务消费者(Consumer)通过一系列的工作将请求发送给服务提供者(Provider)。
为了实现这样一个目标,Dubbo 引入了注册中心(Registry)组件,通过注册中心,服务消费者可以感知到服务提供者的连接方式,从而将请求发送给正确的服务提供者。
搭建Dubbo源码环境
好的开始是成功的一半,阅读源码也是一样。
这里我直接从官方仓库https://github.com/apache/dubbo.git Fork到自己的仓库,我当前最新版本是3.2,我就直接用最新版本了。
git clone https://github.com/apache/dubbo.git
然后切换分支,因为目前最新的是 Dubbo 3.2 版本,所以这里我们就用这个新版本:
git checkout -b qhyu-3.2 3.2
不急着使用IDEA导入,直接使用命令行进行编译
mvn -X clean install -Dmaven.test.skip=true
编译的时间我这边比较长,20来分钟,不着急慢慢等待。
最后,执行下面的命令转换成 IDEA 项目:
mvn idea:idea // 要是执行报错,就执行这个 mvn idea:workspace
最后一步的时间也比较长,我这边16分钟左右。
然后,在 IDEA 中导入源码,因为这个导入过程中会下载所需的依赖包,所以会耗费点时间。
Dubbo源码核心模块
Dubbo 是一款开源的高性能、轻量级的分布式服务框架,它由多个核心模块组成。下面是 Dubbo 的核心模块的简要介绍:
-
dubbo-common:该模块提供了 Dubbo 框架中通用的工具类和功能,例如参数封装、反射工具、序列化、异常处理等。它是其他模块的基础依赖。
-
dubbo-config:该模块定义了 Dubbo 的配置模型,并提供了配置解析和管理的相关功能。它包括了对 XML、Properties 和 Annotation 等多种配置方式的支持。
-
dubbo-registry:该模块实现了服务注册与发现的功能,包括服务注册中心的抽象和多种实现,例如 ZooKeeper、Redis、Multicast 等。它提供了服务的注册、订阅和通知等机制。
-
dubbo-remoting:该模块提供了 Dubbo 框架的远程通信功能,包括底层的网络传输和编解码。它支持多种通信协议,如 TCP、HTTP、Dubbo 协议等,并提供了客户端和服务器端的通信处理。
-
dubbo-rpc:该模块实现了 Dubbo 的远程过程调用(RPC)功能,包括服务暴露和引用的相关逻辑。它支持多种调用方式,如同步调用、异步调用、单向调用等,并提供了负载均衡、容错处理等机制。
-
dubbo-cluster:该模块实现了 Dubbo 的集群容错功能,用于处理服务提供者的集群化部署和调用失败时的容错处理。它支持多种集群容错策略,如 Failover、Failfast、Failsafe 等。
-
dubbo-monitor:该模块提供了 Dubbo 框架的监控和管理功能,用于收集和展示服务的运行状态和统计信息。它支持多种监控中心的接入,如 Dubbo 自带的 Monitor 中心、Elasticsearch、Prometheus 等。
-
dubbo-container:该模块提供了 Dubbo 服务的容器化功能,用于将 Dubbo 服务部署到不同的容器中,如 Spring、Servlet 容器等。它提供了服务的生命周期管理和容器的启动和停止等功能。
这些核心模块共同构成了 Dubbo 框架的基础架构,每个模块负责不同的功能和领域,通过协同工作实现了 Dubbo 的分布式服务调用和管理。通过深入研究这些模块的源码,可以更好地理解 Dubbo 的设计和实现原理。