一个业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题;
解决:全局的数据一致性问题
官网:http://seata.io/zh-ch/
全局事务ID
1+3
TC:事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚
TM:控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议;
RM:控制分支事务,负责分支注册,状态汇报,并接收事务协调器的指令,驱动分支本地提交和回滚
过程:
1.TM向TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的XID
2.XID在微服务调用链路的上下文中传播;
3.RM向TC注册分支事务,将其纳入XID对应全局事务的管辖
4. TM向TC发起针对XID的全局提交或回滚决议
5. TC调度XID下管辖的全部分支事务完成决议或回滚请求
安装:
下载地址:https://githun.com/seata/release
怎么玩:
本地@Transactional
全局@GlobalTransactional
下载完之后:
1.修改conf目录下的file.conf配置文件:自定会议事务组名称+事务日志存储模式为db+数据库连接信息
service模块(自定义事务组名称):将vgroup_mapping.my_test_tx_group = "default"改成
vgroup_mapping.my_test_tx_group = "fsp_tx_group(工程名字)”
stroe模块:mode="file"改成mode=“db”
db里面的数据库url,用户名与密码改成自己的
2.在mysql数据库新建库seata
3.在seata库里面见表:建表db_store.sql在\seata\conf目录里面db_store.sql复制黏贴即可
4。修改seata\conf目录下的registry.conf配置文件
type="file"改成type=“nacos”
nacos模块serverAddr = “localhost::8848”改成需要的注册中心
启动seata-server(先启动nacos)
在件业务数据库的表中加入一张表(seata\conf目录下的db_undo_log.sql)回滚记录配置
Module
pom:
nacos-discovery
<dependency>
<groupId>com.alibaba.cloud<groupId>
<artifactId>spring-cloud-starter-seata</artifactId>
<exclusions>
<exclusion>
<artifactId>seata-all</artifactId>
<groupId>io.seata<groupId>
<exclusion>
<exclusions>
<dependency>
<dependency>
<artifactId>seata-all</artifactId>
<groupId>io.seata<groupId>
<version>0.9<version>
<dependency>
yml:
server:
port:2001
spring:
application:
name:seata-order-service
cloud:
alibaba:
seata:
#自定义事务名称需要与seata-server中的对应
tx-service-group:fsp_tx_group
nacos:
discovery:
server-addr:localhost:8848
datasource:
driver-class-name:com.mysql.jdbc.Driver
url:jdbc:mysql://localhost:3306/seata_order
username:root
password:123456
feign:
hystrix:
enabled:true
logging:
level:
io:
seata:info
mybatis:
mapperLocation:classpath:mapper/*.xml
在resource下面创建file.conf文件
拷贝->server模块
vgroup_mapping.my_test_tx_group = "default"改成
vgroup_mapping.fsp_tx_group = "default”
db模块:
修改db-type=“mysql”
driver-class-name=
url=
user=
password=
即可
resource创建
registry.conf
registry模块:type=‘nacos’
nacos模块
serverAddr=“localhost:8848”
复制即可