Common-Seata 分布式事务使用

Common-Seata 分布式事务使用

PIGCLOUD

📄 common-seata 分布式事务使用 _ PIGCLOUD

](https://www.pig4cloud.com/)

产品

商业版

生态🔥

📄 common-seata 分布式事务使用

pigcloud

本章文档对应视频 📺 10.分布式事务使用讲解

# 什么是分布式事务

上图所示,当请求 A 模块时

    1. A 模块 Mapper 直接操作 DB 得到数据集
    1. 使用 Feign 调用 B 模块
    1. B 模块 Mapper 操作 DB 得到数据集
    1. 合并 1.3 两步操作或者其他的操作

分析上图可能 发生异常及其回滚

  • 步骤 1 发生异常, spring 事务会自动回滚

  • 步骤 2 发生异常, spring 事务会自动回滚

  • 步骤 3 发生异常, 3 会自动回滚, 2 根据返回码抛出自定义异常 1 会自动回滚

  • 步骤 4 发生异常, spring 事务会自动 1 的操作 ,但是 3 的操作不会回滚

    分布式事务的目标 当 A 模块开启事务时,如果 4 操作过程异常,3 的操作应该回滚

    1652501966

# 运行 Seata Server 服务端

1
2
3
4
5
`docker run --name seata-server -p 8091:8091 -p 7091:7091 registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/seata-server:2.0.0`



Copied!

# 微服务客户端接入

# ① 添加依赖

==服务提供方、调用方都需要添加此依赖==

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>com.pig4cloud</groupId>
<artifactId>pigx-common-seata</artifactId>
</dependency>




Copied!

# ② 服务调用方声明 GlobalTransactional

1
2
3
4
5
6
7
8
9
10
@GlobalTransactional // 分布式事务注解
@Transactional(rollbackFor = Exception) // spring 事务注解
public R consumer() {
feign.providerMethod() // 通过feign 调用 服务提供方的接口
}




Copied!

==另外:服务提供方、调用方都需要添加 @Transactional spring 事务注解==

# ③ 微服务涉及数据库添加 undo_log 表

==服务提供方、调用方都需要添加此表==

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;




Copied!

📄 大屏设计模块使用 Sentinel 控制台使用

  • 标题: Common-Seata 分布式事务使用
  • 作者: PIGCLOUD
  • 创建于 : 2024-01-01 00:00:00
  • 更新于 : 2025-09-22 14:27:28
  • 链接: https://anime-blog.52lin.site/📄 common-seata 分布式事务使用 _ PIGCLOUD/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。