news 2026/4/17 15:50:24

5、Seata

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5、Seata

分布式事务 产生原因:

  • 由于service相互分离,没有协同,相互感知各自的状态,导致事务回滚出现问题

原理

  • RM(Resource Manager):用于直接执行本地事务的提交和回滚。
  • TM(Transaction Manager):TM是分布式事务的核心管理者。比如现在我们需要在借阅服务中开启全局事务,来让其自身、图书服务、用户服务都参与进来,也就是说一般全局事务发起者就是TM。
  • TC(Transaction Manager)这个就是我们的Seata服务器,用于全局控制,比如在XA模式下就是一个协调者的角色,而一个分布式事务的启动就是由TM向TC发起请求,TC再来与其他的RM进行协调操作。

TM请求TC开启一个全局事务,TC会生成一个XID作为该全局事务的编号,XID会在微服务的调用链路中传播,保证将多个微服务的子事务关联在一起;RM请求TC将本地事务注册为全局事务的分支事务,通过全局事务的XID进行关联;TM请求TC告诉XID对应的全局事务是进行提交还是回滚;TC驱动RM将XID对应的自己的本地事务进行提交还是回滚;


一、安裝

各个服务作为Seate的客户端,只需要导入依赖即可:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>

然后添加配置:

seata:service:vgroup-mapping:# 这里需要对事务组做映射,默认的分组名为 应用名称-seata-service-group,将其映射到default集群# 这个很关键,一定要配置对,不然会找不到服务bookservice-seata-service-group:defaultgrouplist:default:localhost:8868

二、使用

开启分布式事务的方法上添加@GlobalTransactional注解:

@GlobalTransactional@OverridepublicbooleandoBorrow(intuid,intbid)

Seata会分析修改数据的sql,同时生成对应的反向回滚SQL,这个回滚记录会存放在undo_log 表中。所以要求每一个Client 都有一个对应的undo_log表(也就是说每个服务连接的数据库都需要创建这样一个表,这里由于我们三个服务都用的同一个数据库,所以说就只用在这个数据库中创建undo_log表即可),表SQL定义如下:

CREATETABLE`undo_log`(`id`BIGINT(20)NOTNULLAUTO_INCREMENT,`branch_id`BIGINT(20)NOTNULL,`xid`VARCHAR(100)NOTNULL,`context`VARCHAR(128)NOTNULL,`rollback_info`LONGBLOBNOTNULL,`log_status`INT(11)NOTNULL,`log_created`DATETIMENOTNULL,`log_modified`DATETIMENOTNULL,`ext`VARCHAR(100)DEFAULTNULL,PRIMARYKEY(`id`),UNIQUEKEY`ux_undo_log`(`xid`,`branch_id`))ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:26:12

Dify与Spring AI部署流程深度解析(从零搭建到高可用实战)

第一章&#xff1a;Dify与Spring AI集成概述将 Dify 与 Spring AI 集成&#xff0c;能够显著提升企业级 Java 应用在人工智能能力方面的开发效率。Dify 作为一个低代码 AI 应用开发平台&#xff0c;提供了可视化的工作流编排、模型管理与 API 服务发布能力&#xff1b;而 Sprin…

作者头像 李华
网站建设 2026/3/29 17:28:29

2025年十大高口碑交互数字人推荐榜单,实现智能互动新体验

2025年被誉为AI交互数字人的黄金落地期&#xff0c;众多企业纷纷布局这一领域。本文将介绍十大高口碑的交互数字人&#xff0c;透析其背后的技术演进路径。这些标杆企业不仅在智能互动方面拥有独特优势&#xff0c;更为用户提供了全新的体验。探索这些数字人的魅力&#xff0c;…

作者头像 李华
网站建设 2026/4/16 17:30:08

基于改进粒子群算法的配电网重构改进探索

基于改进粒子群算法的配电网重构改进 基于改进粒子群算法的配电网重构改进 % 基于改进粒子群算法的配电网重构改进 在电力系统领域&#xff0c;配电网重构一直是个关键议题&#xff0c;它对于降低网损、提升供电可靠性有着重要意义。而粒子群算法&#xff08;PSO&#xff09;作…

作者头像 李华
网站建设 2026/4/16 18:18:28

【代谢组学研究突破指南】:利用R语言完成PCA、PLS-DA和OPLS-DA的终极策略

第一章&#xff1a;代谢组学数据分析概述代谢组学是系统生物学的重要分支&#xff0c;致力于全面研究生物体内小分子代谢物的动态变化。通过对细胞、组织或生物体在特定生理或病理状态下代谢产物的定性和定量分析&#xff0c;揭示代谢通路的调控机制&#xff0c;为疾病诊断、药…

作者头像 李华
网站建设 2026/4/18 3:48:01

【Docker Compose Agent扩展实战】:掌握多服务协同的5大核心技巧

第一章&#xff1a;Docker Compose Agent扩展概述 Docker Compose 是一种用于定义和运行多容器 Docker 应用的工具&#xff0c;通过 YAML 文件配置服务依赖关系与运行参数。随着分布式系统和微服务架构的普及&#xff0c;对动态调度、健康检查与远程管理能力的需求日益增强&…

作者头像 李华
网站建设 2026/4/18 3:48:00

生物信息学高手进阶之路(R语言RNA分析全解析)

第一章&#xff1a;生物信息学与RNA结构分析概述生物信息学作为生物学与计算机科学的交叉领域&#xff0c;致力于利用计算方法解析复杂的生物数据。在基因表达调控研究中&#xff0c;RNA分子不仅承担遗传信息传递功能&#xff0c;其三维结构更直接影响功能表现。因此&#xff0…

作者头像 李华