📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。
📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。
🏆 2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人
🏆 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家
🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~
🍅 文末获取联系 🍅 👇🏻 精彩专栏推荐订阅收藏 👇🏻
专栏系列(点击解锁)
学习路线(点击解锁)
知识定位
🔥Redis从入门到精通与实战🔥
Redis从入门到精通与实战
围绕原理源码讲解Redis面试知识点与实战
🔥MySQL从入门到精通🔥
MySQL从入门到精通
全面讲解MySQL知识与企业级MySQL实战 🔥计算机底层原理🔥
深入理解计算机系统CSAPP
以深入理解计算机系统为基石,构件计算机体系和计算机思维
Linux内核源码解析
围绕Linux内核讲解计算机底层原理与并发
🔥数据结构与企业题库精讲🔥
数据结构与企业题库精讲
结合工作经验深入浅出,适合各层次,笔试面试算法题精讲
🔥互联网架构分析与实战🔥
企业系统架构分析实践与落地
行业最前沿视角,专注于技术架构升级路线、架构实践
互联网企业防资损实践
互联网金融公司的防资损方法论、代码与实践
🔥Java全栈白宝书🔥
精通Java8与函数式编程
本专栏以实战为基础,逐步深入Java8以及未来的编程模式
深入理解JVM
详细介绍内存区域、字节码、方法底层,类加载和GC等知识
深入理解高并发编程
深入Liunx内核、汇编、C++全方位理解并发编程
Spring源码分析
Spring核心七IOC/AOP等源码分析
MyBatis源码分析
MyBatis核心源码分析
Java核心技术
只讲Java核心技术
本文目录
本文目录
本文前言
一、Dubbo开发环境搭建
1、下载并安装JDK
2、Maven下载与配置
3、Zookeeper下载与配置
4、IDE安装
二、Dubbo源码环境搭建
1、环境准备
2、下载源码
3、导入工程
4、代码调试
5、dubbo的核心模块
5.1、dubbo-common 模块
5.2、dubbo-remoting 模块和dubbo-rpc 模块
5.3、dubbo-cluster 模块和dubbo-registry 模块
5.4、monitor 、config、metadata、configcenter模块
总结
本文前言
本文实战与理论相结合,先讲解Dubbo开发环境搭建下载并安装JDK、Zookeeper、IDE、Maven等等,在讲解ubbo源码环境搭建的环境准备,如何下载源码、导入工程并代码调试,最后分析dubbo项目中的核心模块。
一、Dubbo开发环境搭建
1、下载并安装JDK
在 Java Downloads | Oracle 中下载最新的JDK8,并且需要做一些手动配置,可以参考以下操作:环境变量 JAVA_HOME 、CLASSPATH 设置
检查系统是否已经安装好了JDK,在终端输入命令:java -version
2、Maven下载与配置
Maven 可以在 http://maven.apache.org/ 中下载,和配置JDK一样简单,首先将下载的Maven解压缩到任意目录。
将环境变量M2_HOME指向该安装目录,将%MAVEN_HOME%\bin添加到可执行路径,方便在终端执行 Maven命令。
3、Zookeeper下载与配置
在生产环境中已经大量使用ZooKeeper作为注册中心,配置单机 ZooKeeper的步骤,方便本地启动Dubbo。在 http://mirrors.shu.edu.cn/apache/zookeeper/中下载最新的版本,解压缩zookeeper-*.tar.gz文件到任意目录,成为安装目录。
将环境变量 ZK_HOME指向[安装目录]/zookeeper-3.4.13,将${ZK_HOME}/bin添加到可执行路径,方便在终端执行 ZooKeeper命令。在复制一份配置文件zoo_samplecfg 并重命名为 zoo.cfg,然后在终端执行zkServer.sh start 即可,默认会监听 2181端口。
4、IDE安装
目前流行的IDE工具下载地址是IntellijIDEA:www.jetbrains.com。IntellijIDEA具有广泛的功能,也符合主流习惯。
二、Dubbo源码环境搭建
1、环境准备
JDk 1.8.0_515、maven 3.3.9、工具:IntelliJ IDEA 2023、Zookeeper、Dubbo 2.6.x
2、下载源码
// 搭建Dubbo源码环境,到自己的仓库,直接执行下面的命令去下载代码:https://github.com/apache/dubboFork
git clone git@github.com:xxxxxxxx/dubbo.git
// 然后切换分支,因为目前最新的是 Dubbo 2.7.7 版本,所以这里我们就用这个新版本:
git checkout -b dubbo-2.7.7 dubbo-2.7.7
// 执行 mvn 命令进行编译
mvn clean install -Dmaven.test.skip=true
// 最后,在 IDEA 中导入源码(导入过程中会下载所需的依赖包)
mvn idea:idea // 或者执行这个 mvn idea:workspace
3、导入工程
在 IDEA 成功导入 Dubbo 源码之后,可以看到的项目结构,如下图所示:
4、代码调试
Dubbo调用演示可以使用Dubbo演示模块。该模块可以演示一个完整的消费者调用服务提供商的过程。首先启动dubbo-demo-provider,然后启动dubbo-demo-consumer消费程序,直接运行相应模块的main方法。
如果我们想直接调试某个模块的代码,我们需要做什么?在Dubbo的每个模块中,除了主目录中的源代码外,还有一个测试目录,其中包含完整的单元测试代码。在调试某个函数的源代码时,建议先读取相应的单元测试代码,然后在相应的源代码中断点并运行单元测试。例如,如果我们想调试用于负载平衡的源代码,我们可以使用LoadBalanceTest单元测试类。
5、dubbo的核心模块
5.1、dubbo-common 模块
dubbo-common 模块 是Dubbo的公共模块,它有许多工具类和公共逻辑,如Dubbo SPI实现、时间轮实现、动态编译器等。
5.2、dubbo-remoting 模块和dubbo-rpc 模块
1、dubbo-remoting模块(Dubbo远程模块)
Dubbo 的远程通信模块,其中的子模块依赖各种开源组件实现远程通信。在 dubbo-remoting-api 子模块中定义该模块的抽象概念,在其他子模块中依赖其他开源组件进行实现,例如,dubbo-remoting-netty4 子模块依赖 Netty 4 实现远程通信,dubbo-remoting-zookeeper 通过 Apache Curator 实现与 ZooKeeper 集群的交互。
2、dubbo-rpc 模块(Dubbo-rpc模块)
Dubbo 中对远程调用协议进行抽象的模块,其中抽象了各种协议,依赖于 dubbo-remoting 模块的远程调用功能。dubbo-rpc-api 子模块是核心抽象,其他子模块是针对具体协议的实现,例如,dubbo-rpc-dubbo 子模块是对 Dubbo 协议的实现,依赖了 dubbo-remoting-netty4 等 dubbo-remoting 子模块。 dubbo-rpc 模块的实现中只包含一对一的调用,不关心集群的相关内容。
5.3、dubbo-cluster 模块和dubbo-registry 模块
1、dubbo-cluster 模块(Dubbo集群模块)
Dubbo中负责管理集群的模块,提供了一系列与集群相关的功能,如负载平衡、容错和路由。最终目标是将多个Provider 提供者伪装成一个Provider 提供者,这样Consumer 消费者就可以像调用单个Provider 提供者一样调用Provider 集群。
2、dubbo-registry 模块(Dubbo注册模块)
Dubbo中负责与多个开源注册表交互的模块提供了注册中心的功能。其中,Dubbo注册中心 dubbo-registry-api 是一个顶级抽象,而其他子模块是特定开源注册中心组件的特定实现。例如,dubbo-registry-zookeeper 子模块是Dubbo集成到zookeeper中的具体实现。
5.4、monitor 、config、configcenter模块
1、dubbo-monitor模块(Dubbo监控模块)
Dubbo 的监控模块,主要用于统计服务调用次数、调用时间以及实现调用链跟踪的服务。
2、dubbo-config 模块(Dubbo配置模块)
Dubbo 对外暴露的配置都是由该模块进行解析的。例如,dubbo-config-api 子模块负责处理 API 方式使用时的相关配置,dubbo-config-spring 子模块负责处理与 Spring 集成使用时的相关配置方式。有了Dubbo配置模块,用户只需要了解Dubbo的配置规则,而不需要了解Dumbo的内部细节。
Dubbo的元数据模块(元数据的内容将在本课程后面详细介绍)。dubbo元数据模块的实现例程还具有一个用于抽象的API子模块,然后是用于特定实现的其他子模块。
3、dubbo-configcenter 模块(Dubbo配置中心模块)
Dubbo的动态配置模块主要负责服务治理规则的外部配置、存储和通知,并提供多个子模块用于访问各种开源服务发现组件。
总结
本文实战与理论相结合,先讲解Dubbo开发环境搭建下载并安装JDK、Zookeeper、IDE、Maven等等,在讲解ubbo源码环境搭建的环境准备,如何下载源码、导入工程并代码调试,最后分析dubbo项目中的核心模块。