前言
-
什么是分布式事务
在业务系统中,如果发起了一个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