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. dede cms 怎样调用年月日

    一: 首页:([field:pubdate function='strftime("%m-%d",@me)'/])==(5-15)([field:pubdate function= ...

  2. BZOJ 3732: Network Kruskal 重构树

    模板题,练练手~ Code: #include <cstdio> #include <algorithm> #define N 80000 #define setIO(s) f ...

  3. PX4学习之-uORB msg 自动生成模板解读

    最后更新日期 2019-06-22 一.前言 在 PX4学习之-uORB简单体验 中指出, 使用 uORB 进行通信的第一步是新建 msg.在实际编译过程中,新建的 msg 会转换成对应的 .h..c ...

  4. linux查看端口占用情况,python探测端口使用的小程序

    Linux如何查看端口 1.lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000 # lsof -i:8000 COMMAND PID USER ...

  5. 安装破解confluence6.7.1(插图丢了,一直懒得补)

      JIRA安装:https://www.cnblogs.com/wei9593/p/10194784.html 1环境: centos7.2 java-1.8https://www.cnblogs. ...

  6. Kaggle 网站上的练习

    快速的数据科学教程: https://www.kaggle.com/learn/overview

  7. eclipse中把选中的代码全部变成大写或者小写的快捷键

    Ctrl+shift+x是把选中的变成大写 Ctrl+shift+y是把选中的变成小写

  8. MQ常问的问题

    目录 1:什么场景使用了mq?直接掉接口不行吗? 2:用消息队列都有什么优点和缺点? 3:Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别? 4:那你们是如何保证消息队列 ...

  9. spark MLlib 概念 2:Stratified sampling 层次抽样

    定义: In statistical surveys, when subpopulations within an overall population vary, it is advantageou ...

  10. perf 命令

    perf 是用来进行软件性能分析的工具.通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计. 它不但可以分析指定应用程序的性能问题,也可以用来分析内核的性能问题 ...