本文主要分享 Seata 的项目结构。 希望通过本文能让胖友对 Seata 的整体项目有个简单的了解。
在拉取 Seata 项目后,我们会发现拆分了好多 Maven 项目。是不是内心一紧,产生了恐惧感?不要方,我们就是继续怼。
这里先分享一个小技巧。笔者在开始源码学习时,会首先了解项目的代码量。
第一种方式,使用 IDEA Statistic 插件,统计整体代码量。
我们可以粗略的看到,总的代码量在 19878 行。相比 Dubbo 代码量级在10W 级,算起来并不多。
第二种方式,使用 Shell 脚本命令逐个 Maven 模块统计 。
一般情况下,笔者使用 find . -name "*.java"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l
。这个命令只过滤了部分注释,所以相比 IDEA Statistic 会偏多。
当然,考虑到准确性,胖友需要手动 cd
到每个 Maven 项目的 src/main/java
目录下,以达到排除单元测试的代码量。
在开始看项目的结构前,我们先要了解下 Seata 的事务过程中,一共有哪些角色。如下图所示:
引用自 https://github.com/seata/seata
seata-common
项目,提供 Seata 封装的工具类、异常类等,大概在 2022 行代码左右。可以等到代码调用到的时,在看里面的逻辑。
seata-core
项目,提供 Seata 封装的 RPC、数据模型、通信消息格式等,大概在 10701 行。holy shit ,比想象中的多好多代码哈。可以等到代码调用到的时,在看里面的逻辑。
seata-config
项目,Seata 对配置中心的接入,大概在 1778 行代码左右。不同的 Maven 子项目,接入不同的配置中心:
用于 Seata TC 和 Seata RM 从配置中心,读取配置。
seata-config-core
项目,配置的核心实现,默认提供使用 File 存储配置。seata-config-apollo
项目,提供对 Apollo 的接入。seata-config-consul
项目,提供对 Consul 的接入。seata-config-nacos
项目,提供对 Nacos 的接入。seata-config-zk
项目,提供对 Zookeeper 的接入。
seata-discovery
项目,Seata 对注册中心的接入和负载均衡的功能,大概在 3486 行代码左右。不同的 Maven 子项目,接入不同的配置中心:
用于 Seata TC 注册到注册中心。
用于 Seata TM 从注册中心发现 Seata TC 。
seata-registry-core
项目,对注册中心的接入的核心实现,默认提供基于 File 实现注册发现。
seata-discovery-consul
项目,提供对 Consul 的接入。
seata-discovery-eureka
项目,提供对 Eureka 的接入。
seata-discovery-nacos
项目,提供对 Nacos 的接入。
seata-discovery-redis
项目,提供对 Redis 的接入。
seata-discovery-sofa
项目,提供对 SofaRegistry 的接入。
seata-discovery-zk
项目,提供对 Zookeeper 的接入。
seata-rm
项目,Seata 对 RM 的核心实现,大概在 497 行代码。
seata-rm-datasource
项目,Seata 通过对 JDBC 拓展,从而实现对 MySQL 等的透明接入 Seata RM 的实现,大概在 7651 行代码。
🔥 看到此处,我们需要知道,seata-rm
和 seata-rm-datasource
项目,是我们需要重点看的项目。虽然 seata-rm-datasource
项目看起来代码很多,但是考虑到对 JDBC 相关接口的实现,很多是重复代码,实际算下来,也不会有这么大的代码量。so 保持淡定 🙂 。
seata-server
项目,Seata 对 TC 的核心实现,提供了事务协调、锁、事务状态、事务会话等功能,大概在 4049 行代码。
🔥 seata-server
项目,是另外一个我们需要花精力去研究的项目。
seata-tm
项目,Seata 对 TM 的实现,提供了全局事务管理,例如说事务的发起,提交,回滚等,大概在 1316 行代码。
🔥 seata-tm
项目,也是一个我们需要花精力去研究的项目。
seata-tcc
项目,Seata 对 TCC 事务模式的实现,大概在
这个项目,可以等看完 Seata 核心逻辑后,在进行来看。
未来,Seata 会提供 Saga 事务模式,应该也会是一个子项目。
seata-spring
项目,Spring 对 Seata 集成的实现,大概在 1019 行代码。例如说,使用 @GlobalTransactional
注解,自动创建全局事务,就是通过 seata-spring
项目来实现的。
integration
项目,用于对不同框架的集成,大概在 146 行代码左右。目前提供了对 Dubbo 框架的集成:
seata-dubbo
项目,提供对 Apache Dubbo 的接入。seata-dubbo-alibaba
项目,提供对 Alibaba Dubbo 的接入。版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_42073629/article/details/106749752
内容来源于网络,如有侵权,请联系作者删除!