news 2026/7/13 2:52:16

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/7/5 4:56:37

变量太多反降效?,手把手教你用R语言做农业数据精简与优化

第一章&#xff1a;农业产量的 R 语言变量选择在农业数据分析中&#xff0c;准确预测作物产量依赖于从大量环境、土壤和管理因素中识别关键变量。R 语言提供了丰富的统计和机器学习工具&#xff0c;可用于高效地进行变量选择&#xff0c;从而提升模型的解释力与预测性能。数据预…

作者头像 李华
网站建设 2026/7/12 14:12:23

arm中的ros项目交叉编译,一整套 业务级、完整、可直接用 的交叉编译 + rootfs 同步 + 自动上传 + 自动运行脚本 (未完全解决编译问题,大概编译到7%的时候报错,出现的问题应该在原)

arm中的交叉编译,一整套 业务级、完整、可直接用 的交叉编译 + rootfs 同步 + 自动上传 + 自动运行脚本 (未完全解决编译问题,大概编译到7%的时候报错,出现的问题应该在原代码里,原代码里可能用绝对路径引用了第三方库等原因吧) (大家可以在我的基础上在去处理交叉编译…

作者头像 李华
网站建设 2026/7/8 5:21:15

【限时干货】私有化Dify日志分析最佳实践:3个真实场景还原

第一章&#xff1a;私有化Dify日志分析的核心价值 在企业级AI应用部署中&#xff0c;私有化Dify平台的引入不仅保障了数据安全与合规性&#xff0c;更通过精细化的日志分析能力&#xff0c;释放出可观的运维洞察力。通过对模型调用、用户交互、系统异常等关键事件的全链路记录&…

作者头像 李华
网站建设 2026/7/11 9:01:52

错过再等十年:IPCC级气候归因模型R实现全过程首次公开

第一章&#xff1a;极端事件归因的科学背景与R语言优势极端气候事件如热浪、暴雨和干旱的频率与强度在全球变暖背景下显著上升&#xff0c;推动了极端事件归因&#xff08;Extreme Event Attribution, EEA&#xff09;这一新兴气候科学领域的发展。该领域旨在量化人类活动对特定…

作者头像 李华
网站建设 2026/7/12 12:55:53

CPU资源争抢严重?揭秘智能Agent容器QoS分级背后的资源限制逻辑

第一章&#xff1a;CPU资源争抢严重&#xff1f;揭秘智能Agent容器QoS分级背后的资源限制逻辑在高密度容器化部署场景中&#xff0c;多个智能Agent可能共享同一宿主机的CPU资源&#xff0c;导致关键服务因资源争抢而性能下降。Kubernetes通过QoS&#xff08;服务质量&#xff0…

作者头像 李华
网站建设 2026/7/12 22:49:27

Dify权限系统全剖析:4步构建安全可控的Agent工具访问体系

第一章&#xff1a;Dify权限系统全剖析&#xff1a;4步构建安全可控的Agent工具访问体系理解Dify权限模型的核心设计 Dify采用基于角色的访问控制&#xff08;RBAC&#xff09;模型&#xff0c;将用户、角色与资源权限解耦&#xff0c;实现细粒度的权限管理。每个Agent被视为独…

作者头像 李华