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。

相关内容

热门资讯

[实测了解]“十三十三水有没有... 您好:十三十三水这款游戏可以开挂,确实是有挂的,需要了解加客服微信【6670747】很多玩家在这款游...
玩家必看“个旧麻将辅助挂专用版... 您好:个旧麻将这款游戏可以开挂,确实是有挂的,需要软件加微信【6380798】,很多玩家在乐酷副厅这...
重大通报-" YY诗... 您好:YY诗词这款游戏可以开挂,确实是有挂的,需要软件加微信【9503776】,很多玩家在YY诗词这...
盘点一款“中至江西麻将究竟有挂... 您好:中至江西麻将这款游戏可以开挂,确实是有挂的,需要软件加微信【8487422】很多玩家在这款游戏...
重磅.来袭“凑一桌游戏辅助挂 ... 您好:凑一桌游戏这款游戏可以开挂,确实是有挂的,需要软件加微信【3716361】,很多玩家在永和备厅...