news 2026/6/20 6:13:32

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/6/17 22:07:33

艾邦智能在线式真空灌胶机:实现高品质、高效率灌胶的卓越解决方案

https://www.aibangfa.com/news-detail.html?article_id40 在线式真空灌胶机是一种在真空环境下对产品进行精密灌封的高效设备。随着工业自动化水平的不断提升&#xff0c;越来越多的制造企业开始采用真空灌胶技术以优化生产流程。 面对日益增长的市场需求&#xff0c;艾邦智…

作者头像 李华
网站建设 2026/6/18 22:53:38

Spring-AI学习

SpringAI 大模型应用开发篇-SpringAI 项目的新手入门知识 什么是 Spring AI&#xff1f;Spring AI 入门教程 官网文档&#xff1a; 学习资源与社区支持 官方文档&#xff1a;Spring AI ReferenceGitHub 仓库&#xff1a;spring-projects/spring-ai中文教程&#xff1a;Spring …

作者头像 李华
网站建设 2026/6/19 21:31:20

R语言在环境监测中的应用(趋势检验全攻略):从入门到项目落地

第一章&#xff1a;R语言与环境监测趋势分析概述R语言作为一种开源的统计计算与图形可视化工具&#xff0c;在环境科学领域展现出强大的应用潜力。其丰富的包生态系统&#xff08;如ggplot2、dplyr、tidyr和zoo&#xff09;为处理时间序列数据、空间信息及多变量分析提供了灵活…

作者头像 李华
网站建设 2026/6/14 5:10:59

揭秘Dify与Spring AI模型对接难点:5大关键步骤彻底搞懂

第一章&#xff1a;揭秘Dify与Spring AI模型对接的核心价值在AI驱动的应用开发浪潮中&#xff0c;Dify 与 Spring 框架的深度融合为后端开发者提供了高效构建智能服务的新路径。通过将 Dify 的可视化 AI 工作流能力嵌入 Spring 应用&#xff0c;开发者能够在不脱离原有架构的前…

作者头像 李华
网站建设 2026/6/17 23:15:21

【紧急安全预警】:Dify解密算法已可绕过AES-256加密?真相令人震惊

第一章&#xff1a;【紧急安全预警】&#xff1a;Dify解密算法已可绕过AES-256加密&#xff1f;真相令人震惊近期&#xff0c;网络安全社区中流传一则关于“Dify平台存在可绕过AES-256加密机制”的严重漏洞报告。经多方技术团队交叉验证&#xff0c;该说法部分属实——攻击者在…

作者头像 李华
网站建设 2026/6/15 6:54:55

分布式训练系统设计:AI架构师的流水线并行技术

分布式训练系统设计&#xff1a;AI架构师的流水线并行技术深度解析 一、引言&#xff1a;大模型时代的算力困境与破局之道 1.1 钩子&#xff1a;当模型大到单卡装不下时&#xff0c;我们该怎么办&#xff1f; 2020年&#xff0c;GPT-3以1750亿参数刷新了人类对大模型的认知&…

作者头像 李华