本篇内容介绍了“seata项目中完整的分布式事务过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一个完整的分布式事务大致分为以下几步:
TM(bussiness) 向 TC(seata-server) 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。
XID 在微服务调用链路的上下文中传播。
RM (account,order,storage)向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。
TM 向 TC 发起针对 XID 的全局提交或回滚决议。
TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。
相关概念
Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚;
Transaction Manager(TM): 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议;
Resource Manager (RM): 控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚;
我们模拟一个正常商品下单的过程,整个流程涉及到以下几个步骤:
(1)调用Bussiness服务购买商品;
(2)Bussiness调用storage服务检查并减少库存;
(3)Business调用order服务下单;
(4)order服务调用account服务入账。
模拟客户下单的整个流程如下所示
(注意:图中的全局事务和分支事务是在调用接口时,由seata代理自动注册的)
1.客户下单。
2.请求进入Business服务后,调用下单接口;
下单接口内部实现如下图所示:
该接口开启了一个全局事务,全局事务开启后会在global_table中创建一条全局事务记录(如下图所示),详细记录了全局事务的id发起者名称,事务所属服务组,接口名称等等,记录在事务结束后会自动删除。
下单接口的操作流程是 先扣库存,扣除成功后再创建订单。
3.扣减库存时调用库存服务的deduct()接口, 接口的详细实现如下图所示
该接口是在全局事务内调用的,因此可以获取到全局事务的XID,通过该ID可以去global_table中查询全局事务的详细信息,如状态等。
该接口也开启了事务,因此会创建一个分支事务,并在branch_table表中插入一条分支事务记录,分支事务信息如下
4.库存扣除成功后,调用订单服务下单。
5下单成功后,调用账户服务扣钱。
“seata项目中完整的分布式事务过程”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。