分布式事务之阿里Seata方案(附源码)

前言:

     对比了很多分布式事务的框架(LCN,TCC-transaction,等等)决定还是采用seata来写篇文章,采用的是SpringCloud微服务编码

    分布式事务产生的历史和背景这边就不多叙述了,不太了解的朋友可以看我之前的文章,理论写的比较多(2PC,TCC,本地消息事务都有)。今天主要是带大家用阿里开源框架去解决微服务中的核心问题,分布式事务,以前同事公司也是用的这套框架,也因为是阿里的产品,所以比较放心。

 

seata介绍:

    简易可扩展的自治式分布式事务管理框架。阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback, Fescar),和社区一起共建分布式事务解决方案。为了达到适用于所有的分布式事务业务场景的目标,也为了社区更中立、更开放、生态更加丰富,社区核心成员们决定进行品牌升级,改名 Seata。Seata 意为:Simple Extensible Autonomous Transaction Architecture,是一套一站式分布式事务解决方案。

 

seata组件:

    Transaction Coordinator(TC):管理全局的分支事务的状态,用于全局性事务的提交和回滚。

Transaction Manager(TM):事务管理器,用于开启全局事务、提交或者回滚全局事务,是全局事务的开启者。

Resource Manager(RM):资源管理器,用于分支事务上的资源管理,向TC注册分支事务,上报分支事务的状态,接受TC的命令来提交或者回滚分支事务

 

原理分析:

    Seata的原理可以用2PC去理解,通过seata组件我们大概就能理解它嗯嗯意思,事务的最终提交或者回滚由事务管理器来监听,解释一下2PC,比如:你周末约着和两朋友去吃火锅,然后你问朋友A有时间没有,A说有时间,再问B朋友,B朋友说:我也想去呀,项目上线,周末要加班,没时间。这时候可能你就不太想去了。所有就取消活动了。这里就可以把你自己当做事务管理器TM,也是事务的发起方.你朋友可以当做RM 资源管理器。两阶段也就是指的 : 第一阶段你去问看看他们有没有时间,然后他们反馈消息给你,第二阶段就是你收到所有人的消息后,如果有不同意的,那么就取消活动。

 

原理图如下:

 

 

seata集成Springcloud:

 

  1. 1.seata服务器的搭建:大家可以去git上下载 :

  2. https://github.com/seata/seata/releases,

    国外镜像比较慢,我这边提供了CSDN地址: 

    https://download.csdn.net/download/zzxwx/12113503

  3. 2.进入解压包的bin目录启动服务 命令: sh seata-server.sh -9 8091 -m file 控制台输出成功启动server的字样代表启动成功

  4. 3.业务代码的集成, 我这边测试的项目结构如下:

5.rueka 作为注册中心,goods商品模块,order订单模块,这边我模拟用户下单减商品库存的操作。所以这边发起方就可以理解为订单模块,订单模块调用商品模块,订单记录表插入一条记录,商品模块扣减商品库存

 

6.引入seata jar包

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-alibaba-seata</artifactId>
   <version>2.1.0.RELEASE</version>
</dependency>

7.换数据源为阿里的代理数据源,因为失败了,需要记录日志回滚  

源码查看DataSourceConfig.java

8.主要是作为错误记录日志,改写原有数据源的方式

9.项目resource路径下添加 registry.conf 和 file.conf regist.conf 中的

type=file 其实也支持 redis zk等等

10.文件file.conf 文件中的server 里的属性修改为:vgroup_mappgin.自己的项目名-fesacar-service-group="default"

11.数据库添加表 undo_log 用来记录日志,事务处理失败后,用来回滚的日志

12.然后发起方的service添加主键 @GlobalTransactional

13.至此所有集成完毕,可以开始愉快地测试代码了访问 order模块 /userDownUser 可以测试下单 num为100时候为异常测试 查看order 和goods表的数据是否同时成功和失败

 

最后感谢大家的阅读,祝大家新年快乐,相亲的能成功~

天冷码字不易,你们的支持是我最大的动力,年后会给大家带来面试题分析,敬请期待~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你微笑莳很美丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值