SpringCloud Day13---SpringCloud Alibaba Seata 处理分布式事务(三)

简介: SpringCloud Day13---SpringCloud Alibaba Seata 处理分布式事务(三)

16.6 Test

462d942bb9a70c81ae5e9eeb889bfe8d.jpg

16.6.1 数据库初始情况


SELECT * FROM seata_order.t_order


7213f86ef6fc76b4a0ac6be591f5f107.png


SELECT * FROM seata_storage.t_storage


607a6ec3e28ddc00bd9b6d5c1726a987.png


SELECT * FROM seata_account.t_account;


3d8b3e30edd542fd032cb4fd82b80ddf.png


16.6.2 正常下单


访问: http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100


数据库情况:


b59cb977ef48eefb736535272f393719.png


aa3d4968b12f725ff998cd16f86dd1ed.png

396b774f99be0385bc984e3e2fdb6c04.png

16.6.3 超时异常,没加@GlobalTransactional


AccountServiceImpl添加超时

4e8dc4811ab853f3936d49fc2717d50e.png

数据库情况:


a277a8cd543edca3add2495144045b61.png

8d25a3bb38a9d8be808dedd67b38dc7e.png


384423982d071ec507a7fa51cbd70e7b.png

故障情况:


当库存和账户金额扣减后,订单状态并没有设置为已经完成,没有从零改为1.而且由于feign的重试机制,账户余额还有可能被多次扣减


16.6.4 超时异常,添加@GlobalTransactional


AccountServiceImpl添加超时

OrderServiceImpl添加@GlobalTransactional


57878fabb04319838ae562d5f9de653c.png


结果:下单后数据库数据并没有任何改变,记录都添加不进来


16.7 补充

16.7.1 Seata


  • 2019年1月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案
  • Simple Extensible Autonomous Transaction Architecture,简单可扩展自治事务框架
  • 2020起始,参加工作后用1.0以后的版本


2837f3c552780a7eb761036b6772c3de.png


16.7.2 再看TC/TM/RM三大组件


省略…


16.7.3 AT模式如何做到对业务的无侵入


  • 是什么


6be0ed456b71ae77aae18ffc565a4788.png




一阶段加载


在一阶段,Seata 会拦截“业务 SQL”,

1 解析 SQL 语义,找到“业务 SQL”要更新的业务数据,在业务数据被更新前,将其保存成“before image”,

2 执行“业务 SQL”更新业务数据,在业务数据更新之后,

3 其保存成“after image”,最后生成行锁。

以上操作全部在一个数据库事务内完成,这样保证了一阶段操作的原子性。


49b860e5844f221fba198004a63c793e.png



  • 二阶段提交


二阶段是顺利提交的情况

因为“业务 SQL”在一阶段已经提交至数据库,所以Seata框架只需将一阶段保存的快照数据和行锁删掉,完成数据清理即可。


027f0f11eaa4daf058cc9f52c8fe3faa.png


二阶段回滚


二阶段如果是回滚的话,Seata 就需要回滚一阶段已经执行的“业务 SQL”,还原业务数据。

回滚方式便是用“before image”还原业务数据;但在还原前要首先要校验脏写,对比“数据库当前业务数据”和 “after image”,如果两份数据完全一致就说明没有脏写,可以还原业务数据,如果不一致就说明有脏写,出现脏写就需要转人工处理。


2d46760a521655c593f1c60b31ac451b.png

16.7.4 Debug过程分析


5cfd94abe6565b51a884a6e3a7db2d1a.png

目录
打赏
0
0
0
0
29
分享
相关文章
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
369 1
|
14天前
|
SQL
seata是怎么进行分布式事务控制的
seata是怎么进行分布式事务控制的
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
276 4
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
591 7
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
167 1
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
216 1

热门文章

最新文章