一个业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题; 解决:全局的数据一致性问题 官网: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” 复制即可