1. 概述

在拉取 Seata 项目后,我们会发现拆分了好多 Maven 项目。

2. 代码统计

第一种方式,使用 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 目录下,以达到排除单元测试的代码量。

3. Seata 角色

Seata TC(Transaction Coordinator),事务协调者,会接受全局事务的开启、提交、回滚,分支事务的注册。通过它的协调,达到多事务的一致性。
Seata TM(Transaction Manager),事务管理器,或者可以理解成事务的发起者,负责向 TC 发起全局事务的开启、提交、回滚。
Seata RM(Resource Manager),资源管理器,或者可以理解成事务的参与者,负责向 TC 发起分支事务的注册、提交,接收自 TC 请求的分支事务的提交、回滚。

4. seata-common 项目

seata-common 项目,提供 Seata 封装的工具类、异常类等,大概在 2022 行代码左右。可以等到代码调用到的时,在看里面的逻辑。

5. seata-core 项目

seata-core 项目,提供 Seata 封装的 RPC、数据模型、通信消息格式等,大概在 10701 行。

6. seata-config 项目

用于 Seata TC 和 Seata RM 从配置中心,读取配置。
seata-config-core 项目,配置的核心实现,默认提供使用 File 存储配置。
seata-config-apollo 项目,提供对 Apollo 的接入。
seata-config-consul 项目,提供对 Consul 的接入。
seata-config-nacos 项目,提供对 Nacos 的接入。
seata-config-zk 项目,提供对 Zookeeper 的接入。

7. seata-discovery 项目

用于 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 的接入。

8. seata-rm 项目

seata-rm 项目,Seata 对 RM 的核心实现,大概在 497 行代码。
seata-rm-datasource 项目,Seata 通过对 JDBC 拓展,从而实现对 MySQL 等的透明接入 Seata RM 的实现,大概在 7651 行代码。

9. seata-server 项目

seata-server 项目,Seata 对 TC 的核心实现,提供了事务协调、锁、事务状态、事务会话等功能,大概在 4049 行代码。

10. seata-tm 项目

seata-tm 项目,Seata 对 TM 的实现,提供了全局事务管理,例如说事务的发起,提交,回滚等,大概在 1316 行代码。

11. seata-tcc 项目

seata-tcc 项目,Seata 对 TCC 事务模式的实现,大概在
这个项目,可以等看完 Seata 核心逻辑后,在进行来看。
未来,Seata 会提供 Saga 事务模式,应该也会是一个子项目。

12. seata-spring 项目

seata-spring 项目,Spring 对 Seata 集成的实现,大概在 1019 行代码。例如说,使用 @GlobalTransactional 注解,自动创建全局事务,就是通过 seata-spring 项目来实现的。

13. integration 项目

integration 项目,用于对不同框架的集成,大概在 146 行代码左右。目前提供了对 Dubbo 框架的集成:
seata-dubbo 项目,提供对 Apache Dubbo 的接入。
seata-dubbo-alibaba 项目,提供对 Alibaba Dubbo 的接入。

seata项目结构的更多相关文章

  1. 认识ASP.NET 5项目结构和项目文件xproj

    ASP.NET 5 在项目结构上做了很大的改变,我们以前熟悉的目录结构与项目文件内容都不太一样了,本篇文章带大家了解 ASP.NET 5 到底跟以前有哪些不一样的地方. 我们先用 Visual Stu ...

  2. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

  3. Android之什么是Activity和常用的ADB命令以及Android项目结构的认识

    总结一下之前学习Android的一些内容 一:  Android常用的ADB命令(adb android调试桥)      1.adb devices   查看模拟器设备并重新连接. 2.adb ki ...

  4. Go项目结构和模块导入

    Go项目结构和模块导入 golang项目结构与其他语言类似,但是仍然有一些需要注意的地方. 项目结构 环境配置 go 命令依赖一个重要的环境变量:$GOPATH,它表示GO项目的路径,如下设置 exp ...

  5. android第一行代码-1.项目结构

    0.项目结构 一个简单的android项目结构大致如下 入口就是MainActivity这个类,如果对于一个陌生的项目,最好的办法是看AndroidMainifest.xml,如下 <?xml ...

  6. Mybatis 复习 Mybatis 配置 Mybatis项目结构

    pom.xml文件已经贴在了文末.该项目不使用mybatis的mybatis-generator-core,而是手写Entities类,DaoImpl类,CoreMapper类 其中,Entities ...

  7. django开发个人简易Blog——构建项目结构

    开发之前第一步,就是构造整个的项目结构.这就好比作一幅画,第一步就是描绘轮廓,有了轮廓,剩下的就是慢慢的填充细节.项目结构规划如下图: 项目结构描述: 本项目以fengzhengBlog为根目录. a ...

  8. 架构系列:ASP.NET 项目结构搭建

    我们头开始,从简单的单项目解决方案,逐步添加业务逻辑的约束,从应用逻辑和领域逻辑两方面考虑,从简单的单个项目逐步搭建一个多项目的解决方案.主要内容:(1)搭建应用逻辑和领域逻辑都简单的单项目 (2)为 ...

  9. Android项目结构 以及体系结构

    学习Android平台的人一般对Android的平台的应该有点认识 其它的就不多讲了 Android项目一般由以下几个部分构成 以上是一个简单的Android项目结构目录图 1. src  主要是 源 ...

随机推荐

  1. k8s配置文件模板

    一,deployment Deployment为Pod和Replica Set下一代Replication Controller)提供声明式更新 1,配置示例 apiVersion: apps/v1 ...

  2. IntelliJ IDEA常用快捷键总结

    之前开发项目一直用的是eclipse进行开发,近期在使用IDEA这个工具进行项目开发,之前在eclipse上能使用的快捷键方法放在IDEA上很多都不适用了,因此在此总结一下关于IDEA快捷键的使用方法 ...

  3. [转] Linux环境变量配置文件以及启动顺序

    转自:https://blog.csdn.net/bjnihao/article/details/51775854 一.环境变量配置文件: 对所有用户都起作用 /etc/profile /etc/pr ...

  4. maven项目创建4 dao层整合

    项目配置文件要放在打包成war包的web项目中 创建文件步骤 1    SqlMapConfig.xml <?xml version="1.0" encoding=" ...

  5. [CSP-S模拟测试]:表格(动态开点二维线段树+离散化)

    题目传送门(内部题112) 输入格式 一个数$N$,表示矩形的个数. 接下来$N$行,每行四个整数$X_a,Y_a,X_b,Y_b$.分别表示每个矩形左下角和右上角的坐标. 保证$(X_a<X_ ...

  6. XStream详解

    XStream的作用 XStream可以把JavaBean对象转换成XML! 通常服务器向客户端响应的数据都是来自数据库的一组对象,而我们不能直接把对象响应给客户端,所以我们需要把对象转换成XML再响 ...

  7. Swagger常用参数用法

    别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/m ...

  8. DS博客作业08—课程总结

    1.当初你是如何做出选择计算机专业的决定的? 开始时我选择的专业就是网络/物联网,计算机专业是一个充满创造性的专业 2.对比开篇博客,哪些方面还存在哪些不足? 这个人就像戏台上的老将军,全身插满fla ...

  9. 二、linux下apache2.2.11+php5.6.3的环境配置

    参考文献:http://www.92csz.com/study/linux/16.htm 本节部分操作会直接使用上一节(http://www.cnblogs.com/yxpblog/p/4627509 ...

  10. Java-Thread 线程

    一.进程与线程的概念 进程和线程都是一个CPU工作时间段的描述,只是关注点不同. 进程(Process): 资源(CPU,内存等,文件,网络等)分配的基本单位.系统中有很多进程,它们都会使用内存.为了 ...