什么是分布式事务
上图所示,当请求A模块时
.A模块Mapper直接操作DB 得到数据集
.使用Feign 调用 B模块
.B模块Mapper操作DB 得到数据集
.合并1.3 两步操作或者其他的操作
分析上图可能发生异常及其回滚
o步骤1 发生异常, spring 事务会自动回滚
o步骤2 发生异常, spring 事务会自动回滚
o步骤3 发生异常, 3会自动回滚, 2根据返回码抛出自定义异常 1会自动回滚
o步骤4 发生异常, spring 事务会自动1 的操作 ,但是3的操作不会回滚
分布式事务的目标 当A模块开启事务时,如果4 操作过程异常,3的操作应该回滚
基于 LCN 4.1 深度定制,事务操作和代码耦合度极低,支持注册中心的事务发现和自动管理,用法完全兼容LCN 。以下操作均为简单演示、更负责请参考LCN 官网说明
A/B 模块引入 事务管理依赖
工具类核心包
<dependency>
<groupId>com.hzjt</groupId>
<artifactId>gczjt-common-transaction</artifactId>
</dependency>
A模块的Service 开启事务
o注意这里A作为Feign 的发起方 这里isStart = true 来声明是事务的发起方
@TxTransaction(isStart = true)
@Transactional(rollbackFor = Exception.class)
public Object save() {
}
B模块的Service 同样开启事务
@TxTransaction
@Transactional(rollbackFor = Exception.class)
public Object save() {
}
启动tx-manager 事务协调模块
GczjtxTxManagerApplication
o注意, 先启动tx-manage 然后再启动你的业务模块
这样就完成了分布式事务的接入。
文档更新时间: 2021-08-10 17:00 作者:admin