Seata分布式事务解决方案
分布式有可能会带来很多额外的技术问题,如分布式事务,分布式锁,全局唯一ID等问题,假如从设计层面可以避免这些问题,建议还是从设计层面避免。
安装:
首先下载https://github.com/seata/seata/releases/ 1.4.2的版本,修改file.conf和registry.conf
下载源码https://gitee.com/jovic/seata, 建立seata数据库,执行script/server/db/mysql.sql
启动Eureka,然后启动\seata\seata-server-1.4.2\bin\seata-server.bat
Seata有3个基本组成部分:
A. 事务协调器(TC-Transaction Coordinator):维护全局事务和分支事务的状态,驱动全局提交或回滚。
B. 事务管理器(TM-Transaction Manager): 定义全局事务的范围, 开始全局事务,提交或回滚全局事务。
C.资源管理器(RM-Resource Manager):管理正在处理的分支事务的资源,与TC对话以注册分支事务并报告分支事务的状态,并驱动分支事务的提交或回滚。
Seata管理的分布式事务的典型生命周期:
-
TM要求TC开始一项新的全局事务。TC生成代表全局事务的XID。
-
XID通过微服务的调用链传播。
-
RM将本地事务注册为XID到TC的相应全局事务的分支。
-
TM要求TC提交或回退相应的XID全局事务。
-
TC驱动XID的相应全局事务下的所有分支事务以完成分支提交或回滚
案例:
下面看看下单->扣库存->扣账户余额这个流程,怎么解决分布式事务的问题,图示如下:
测试失败的Case, UserId 为1002 的用户下单,account-service会抛出异常导致事务回滚
http://127.0.0.1:8084/api/business/purchase/rollback
seata-server1.4.2的log可以看到事务回滚成功
测试成功的Case,UserId 为1001的用户下单,事务成功提交:
http://127.0.0.1:8084/api/business/purchase/commit
关注公众号“一米源码”回复“Seata”获取项目示例源码
posted on 2021-06-14 16:30 itproject-manager 阅读(173) 评论(0) 编辑 收藏 举报