news 2026/9/21 15:25: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/9/22 2:07:32

Qwen3-VL-8B:轻量级多模态Embedding新选择

Qwen3-VL-8B&#xff1a;轻量级多模态Embedding新选择 在智能应用遍地开花的今天&#xff0c;用户早已不再满足于“输入文字、得到回复”的单一交互方式。他们希望系统能看懂截图里的报错信息、理解商品图与标题是否匹配、甚至仅凭一张照片就能推荐穿搭风格——这些能力背后&am…

作者头像 李华
网站建设 2026/9/22 2:05:26

本地部署EmotiVoice多音色情感TTS

本地部署 EmotiVoice 多音色情感TTS 在语音合成技术飞速发展的今天&#xff0c;我们早已不满足于“机器念字”式的冰冷朗读。无论是虚拟偶像的深情告白、游戏NPC的情绪爆发&#xff0c;还是智能助手的一句温柔晚安——人们期待的是有温度的声音。而EmotiVoice正是为此而生。 …

作者头像 李华
网站建设 2026/9/21 16:59:34

LobeChat能否实现代码注释生成?文档完整性保障工具

LobeChat能否实现代码注释生成&#xff1f;文档完整性保障工具 在现代软件开发节奏日益加快的今天&#xff0c;一个常见的尴尬场景是&#xff1a;功能刚上线&#xff0c;产品经理催着看效果&#xff0c;而新来的同事却对着一段没有注释的“天书代码”发呆。更糟的是&#xff0c…

作者头像 李华
网站建设 2026/9/20 13:26:02

12.16 脚本网页 Golang标准库

功能&#xff0c;查看go标准库&#xff0c;优点&#xff0c;单页面&#xff0c;便于集成APP<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…

作者头像 李华
网站建设 2026/9/21 15:20:18

【LInux】进程程序替换与shell实现:从fork到exec的完整闭环

文章目录进程程序替换与shell实现&#xff1a;从fork到exec的完整闭环一、进程程序替换1.1 为什么需要程序替换1.1.1 shell如何执行命令1.2 程序替换的原理1.3 exec函数族详解1.3.1 命名规律1.3.2 六个函数的对比1.4 exec函数使用示例1.4.1 基本使用&#xff1a;execl1.4.2 使用…

作者头像 李华
网站建设 2026/9/21 5:37:53

Github 9.6k Star!一款开源的超强大数据可视化神器!

Perspective Perspective是一个交互式分析和数据可视化组件&#xff0c;特别适用于大型或流式数据集。使用它来创建用户可配置的报告、仪表板、笔记本和应用。 在Github上斩获9.6k Star&#xff01; 核心特性 极致性能体验 Perspective使用C编写&#xff0c;并编译为WebAss…

作者头像 李华