Java分布式事务(八)
创始人
2025-05-30 21:17:09

文章目录

    • 🔥Seata提供XA模式实现分布式事务-没有引入分布式事物问题演示
    • 🔥Seata提供XA模式实现分布式事务-项目引入Seata

🔥Seata提供XA模式实现分布式事务-没有引入分布式事物问题演示

初始数据库数据
在这里插入图片描述

正常情况
发送请求http://localhost:6001/transfer?amount=2
在这里插入图片描述
制造异常
在bank2微服务制造异常
在这里插入图片描述

异常后测试
发送请求http://localhost:6001/transfer?amount=2

在这里插入图片描述

🔥Seata提供XA模式实现分布式事务-项目引入Seata

在这里插入图片描述

Seata实现XA要点
⭐全局事务开始使用GlobalTransactional标识。
⭐每个本地事务方案仍然使用@Transactional标识。
⭐每个数据都需要创建undo_log表,此表是Seata保证本地事务一致性的关键。

在这里插入图片描述

创建 UNDO_LOG 表
SEATA XA 模式需要 UNDO-LOG 表

-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE undo_log (id bigint(20) NOT NULL AUTO_INCREMENT,branch_id bigint(20) NOT NULL,xid varchar(100) NOT NULL,context varchar(128) NOT NULL,rollback_info longblob NOT NULL,log_status int(11) NOT NULL,log_created datetime NOT NULL,log_modified datetime NOT NULL,ext varchar(100) DEFAULT NULL,PRIMARY KEY (id),UNIQUE KEY ux_undo_log (xid,branch_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT
CHARSET=utf8;

添加依赖

com.alibaba.cloudspring-cloud-starter-alibabaseata

修改配置文件YML

seata:# 注册中心registry:type: fileservice:# seata服务端的地址和端口信息,多个使用英文分号分隔grouplist:default: 192.168.66.100:9999tx-service-group: my_test_tx_group

bank1微服务开启全局事物

@Transactional
@GlobalTransactional//开启全局事务

在这里插入图片描述

❗❗❗
将@GlobalTransactional注解标注在全局事务发起的Service实现方法上,开启全局事务 :GlobalTransactionalInterceptor会拦截@GlobalTransactional注解的方法,生成全局事务ID
(XID),XID会在整个分布式事务中传递。
在远程调用时,spring-cloud-alibaba-seata会拦截Feign调用将XID传递到下游服务。

bank2开启事物
在这里插入图片描述

测试分布式事物
发送请求http://localhost:6001/transfer?amount=2

注:
传统2PC(基于数据库XA协议)和Seata实现2PC的两种2PC方案,由于Seata的零入侵并且解决了传统2PC长期锁资源的问题,所以推荐采用Seata实现2PC。

相关内容

热门资讯

从“长剧细糠”到长期价值,《大... 摘要:精品长剧仍是高价值资产Fast Reading■支撑起今年各阶段爆款剧和黑马剧的往往不是头部体...
元创股份登陆深交所主板 专注机... 撰文:腾霄编辑:叩叩财经编辑部A股市场正在迎来更多垂直领域的领先选手。2025年12月18日,元创科...
复牌股价大涨!中金“三合一”预... 业内首个“三券商合并”——中金公司吸收合并东兴证券、信达证券,方案正式出炉!2025年12月17日晚...
净利润暴跌87%!中兴通讯的转... 2025年12月11日,曾经的国产手机“一哥”——中兴通讯,A股跌停、H股暴跌13%。但就在前不久,...
底价22.65亿,一家丽思卡尔... 五星酒店丽思卡尔顿(The Ritz-Carlton),也被摆上“货架”了。中国金茂旗下的上海金茂投...