温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

seata项目中完整的分布式事务过程

发布时间:2021-09-01 19:34:27 来源:亿速云 阅读:195 作者:chen 栏目:大数据

本篇内容介绍了“seata项目中完整的分布式事务过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一个完整的分布式事务大致分为以下几步:

  1. TM(bussiness) 向 TC(seata-server) 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。

  2. XID 在微服务调用链路的上下文中传播。

  3. RM (account,order,storage)向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。

  4. TM 向 TC 发起针对 XID 的全局提交或回滚决议。

  5. TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。

相关概念

Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚;
Transaction Manager(TM): 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议;
Resource Manager (RM): 控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚;

我们模拟一个正常商品下单的过程,整个流程涉及到以下几个步骤:

(1)调用Bussiness服务购买商品;

(2)Bussiness调用storage服务检查并减少库存;

(3)Business调用order服务下单;

(4)order服务调用account服务入账。

模拟客户下单的整个流程如下所示

seata项目中完整的分布式事务过程

(注意:图中的全局事务和分支事务是在调用接口时,由seata代理自动注册的)

1.客户下单。

2.请求进入Business服务后,调用下单接口;

下单接口内部实现如下图所示:

seata项目中完整的分布式事务过程

该接口开启了一个全局事务,全局事务开启后会在global_table中创建一条全局事务记录(如下图所示),详细记录了全局事务的id发起者名称,事务所属服务组,接口名称等等,记录在事务结束后会自动删除。

seata项目中完整的分布式事务过程

下单接口的操作流程是 先扣库存,扣除成功后再创建订单。

3.扣减库存时调用库存服务的deduct()接口,   接口的详细实现如下图所示

seata项目中完整的分布式事务过程

该接口是在全局事务内调用的,因此可以获取到全局事务的XID,通过该ID可以去global_table中查询全局事务的详细信息,如状态等。

该接口也开启了事务,因此会创建一个分支事务,并在branch_table表中插入一条分支事务记录,分支事务信息如下

seata项目中完整的分布式事务过程

4.库存扣除成功后,调用订单服务下单。

5下单成功后,调用账户服务扣钱。

“seata项目中完整的分布式事务过程”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI