本文版本使用:seata 1.4.0、nacos 1.3.2、springboot 2.1.1、mysql 5.7,其中springboot、nacos和mysql是安装和使用网上一搜便是,不再赘述。
目录
一、创建数据库表
在各个业务数据库里增加UNDO_LOG表,如有demo-web库和demo-goods库,则俩库里都要创建这个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(20) NOT NULL COMMENT 'branch transaction id',
`xid` VARCHAR(100) 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';
二、配置maven依赖
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.3.2</version>
</dependency>
三、在nacos中新建client配置
在nacos命名空间“demo-web”和“demo-goods”都新建dataId=seata-client的配置:
client端参数配置说明:Seata 参数配置
dataId=seata-client
group=MIDDLEWARE_GROUP
配置文件demo-web:
seata:
enabled: true
application-id: demo-web
tx-service-group: demo-web-seata-service-group # 要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
service:
vgroup-mapping:
demo-web-seata-service-group: default
registry:
type: nacos
nacos:
application: seata-server
server-addr: "127.0.0.1:8848"
group : "SEATA_GROUP"
namespace: "c38bf03a-2ee2-4ee6-834a-2db99dbec528"
config:
type: nacos
nacos:
server-addr: "127.0.0.1:8848"
group : "SEATA_GROUP"
namespace: "c38bf03a-2ee2-4ee6-834a-2db99dbec528"
配置文件demo-goods:
seata:
enabled: true
application-id: demo-goods-seata
tx-service-group: demo-goods-seata-service-group # 要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
service:
vgroup-mapping:
demo-goods-seata-service-group: default
registry:
type: nacos
nacos:
application: seata-server
server-addr: "127.0.0.1:8848"
group : "SEATA_GROUP"
namespace: "c38bf03a-2ee2-4ee6-834a-2db99dbec528"
config:
type: nacos
nacos:
server-addr: "127.0.0.1:8848"
group : "SEATA_GROUP"
namespace: "c38bf03a-2ee2-4ee6-834a-2db99dbec528"
四、业务代码支持
在需要分布式事务的最外层业务员代码加上注解(原本地事务注解@Transactional就不要了,换成如下注解):
@GlobalTransactional(rollbackFor = Exception.class)
至此,服务端与客户端的开发对接工作就完成啦,接下来就是启动测试看看效果!
踩坑:
1.应用启动后一直有错误log:
can not get cluster name in registry config 'service.vgroupMapping.demo-web-seata-service-group', please make sure registry config correct
解决:就是因为client端nacos的相关配置错误了,仔细检查ip、端口、命名空间之类的
官方部署指南:Seata部署指南
官方部署脚本:seata/script at 1.4.0 · seata/seata · GitHub
参考博客:SpringCloud集成Seata并使用Nacos做注册中心与配置中心搭建初体验_calonmo的博客-CSDN博客