本篇文章主要讲 spring cloud 微服务 的架构如何接入 seata。
1. 准备前提
nacos环境,不赘述,请官网下载。
seata-server环境。
客户端项目
两个服务提供方,一个服务调用方,一个接口包。
2. nacos客户端配置
去官网配置中心拉取,这边我们配置AT模式,需要在每个库中加入一个数据回滚表 `undo_log`。
-- for AT mode you must to init this sql for you business database. the seata server not need it.
CREATE TABLE IF NOT EXISTS `undo_log`
(
`branch_id` BIGINT NOT NULL COMMENT 'branch transaction id',
`xid` VARCHAR(128) NOT NULL COMMENT 'global transaction id',
`context` VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
`rollback_info` LONGBLOB NOT NULL COMMENT 'rollback info',
`log_status` INT(11) NOT NULL COMMENT '0:normal status,1:defense status',
`log_created` DATETIME(6) NOT NULL COMMENT 'create datetime',
`log_modified` DATETIME(6) NOT NULL COMMENT 'modify datetime',
UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
AUTO_INCREMENT = 1
DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';
我们到官网配置中心选择对应的配置
config.txt 中是需要配置的信息。上面是对应的配置中心执行脚本。
我们主要关注config.txt中的配置信息,有部分需要修改。
service.vgroupMapping.default_tx_group 这个配置很关键后面会用到。
然后是数据库配置需要修改为自己本地的。
最后 这些配置直接录入nacos中。
3.客户端配置
这边规则需要和服务端的配置一致,所有客户端都得配置。
这边,咱们使用service.vgroupMapping.game=default,
因为服务端我配置了这个配置.
4.使用
只需要在消费方配置对应一个注解
断点测试一下
a执行成功了,且生成了日志回滚记录。
执行到b失败。
a执行了回滚操作,数据库数据也被清空
事务算回滚成功了。
项目代码已经提交gitee。