springboot项目中使用seata实现分布式事务

本文介绍了在SpringBoot项目中如何利用Seata解决分布式事务问题,通过模拟业务场景,展示了Seata如何维护全局事务,确保事务的一致性。文中给出了具体的代码示例,演示了在发生异常时,Seata如何进行事务回滚。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  • 什么是分布式事务
    在业务系统中,如果发起了一个rpc请求(远程调用请求)访问了其他的服务。
    那么该服务的事务我们调用方是无法控制的,比如回滚或者提交。
    所以这就涉及到数据到一致性问题。
    就如同下面这种情况

    此次业务调用中,发起者是Business,如果调用到rpc服务中,三有一是出现异常到情况,那么就需要统一回滚,就算之前有某个调用成功到服务,也需要回滚。
    事务要么一起成功,要么一起失败,所以数据才可以一致。

  • seate怎么实现分布式事务
    seate实现分布式事务的方法如下图

    其实就是维护”一个大的事务“,子事务成功,才可以全部提交。

开始

模拟场景

项目地址
参考里面的springboot


1. 安装一个mysql(我使用的是5.7)

2.初始化一个数据库用这sql文件 [sql/init_db.sql](https://github.com/seata/seata-samples/blob/master/springboot/src/main/resources/sql/initial_db.sql)  

3. 修改yml的配置,设置mysql的用户名和密码(https://github.com/seata/seata-samples/blob/master/springboot/src/main/resources/application.yml#L13-L35)
 
4. 设置dubbo的注册中心 `zookeeper://localhost:2181`

5.启动 seata server

6. 启动 SeataSpringbootApp .

7. 访问 http://127.0.0.1:9999/demo//asset/assign , 观察事务的一致性

说明:
1.zookeeper我使用的是zookeeper:3.5.5
2.seata server地址,启动seata/server/src/main/java/io/seata/server/Server.java

代码

SeataSpringbootApp主要逻辑
这是我们访问的接口

	@RequestMapping(value = "/asset/assign")
    @ResponseBody
    public String 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值