目录
2.进入conf目录下编辑application.yml文件
3.修改27行,将config配置中心改成nacos,可参考application.example.yml文件
5.将store下的mode 参数注释掉,已经读取了nacos 无需配置
Seata远端配置
Seata是一款开源的分布式事务解决方案,而Nacos是一款分布式配置中心。要将Seata与Nacos进行融合,可以按照以下步骤操作:
从Seata官网仓库下载源码包,并解压,建表。
官网地址: Seata-Server版本历史 | Apache Seata
Seata Server 共有以下 3 种存储模式(store.mode):
模式 | 说明 | 准备工作 |
---|---|---|
file | 文件存储模式,默认存储模式; 该模式为单机模式,全局事务的会话信息在内存中读写,并持久化本地文件 root.data,性能较高 | - |
db | 数据库存储模式; 该模式为高可用模式,全局事务会话信息通过数据库共享,性能较低。 | 建数据库表 |
redis | 缓存处处模式; Seata Server 1.3 及以上版本支持该模式,性能较高,但存在事务信息丢失风险 | 配置 redis 持久化配置 |
在 db 模式下,我们需要针对全局事务的会话信息创建以下 3 张数据库表。
-
全局事务表,对应的表为:global_table
-
分支事务表,对应的表为:branch_table
-
全局锁表,对应的表为:lock_table
步骤1
在 MySQL 中,创建一个名为 seata 的数据库实例,并在该数据库内执行以下 SQL。
该SQL也可以在seata目录下:script\server\db 中找到mysql.sql
步骤2
每个微服务对应的数据库中添加回滚日志表UNDO_LOG:
UNDO_LOG必须在每个业务数据库(具体微服务连接的数据库)中出现,用于保存回滚操作数据。
-
当全局事务提交时,对应的UNDO_LOG记录直接删除。
-
当全局事务回滚时,通过该表回滚到以前的数据,并删除UNDO_LOG记录。
-- ----------------------------
-- Table structure for undo_log
-- ----------------------------
drop table if exists `undo_log`;
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL COMMENT '分支事务ID',
`xid` varchar(100) NOT NULL COMMENT '全局事务ID',
`context` varchar(128) NOT NULL COMMENT '上下文',
`rollback_info` longblob NOT NULL COMMENT '回滚信息',
`log_status` int(11) NOT NULL COMMENT '状态,0正常,1全局已完成',
`log_created` datetime NOT NULL NULL COMMENT '创建时间',
`log_modified` datetime NOT NULL NULL COMMENT '修改时间',
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
步骤3
在Seata的script/config-center路径下获取config.txt文件。
复制前可以按需修改配置
需要修改的地方有:
26行:service.vgroupMapping.default_tx_group=default
此处事务组default_tx_group可以自定义命名
对应项目中application.yml
seata:
tx-service-group: huye_tx_group #和这里匹配就行
service:
vgroup-mapping:
huye_tx_group: default # 这里也是
69行:
store.mode=file store.lock.mode=file store.session.mode=file
都修改成
store.mode=db store.lock.mode=db store.session.mode=db
84行:
将db相关的数据源参数修改正确
注意这里跟你上面的数据库名对应上
在Nacos配置中心里新建seataServer.properties
配置,分组名SEATA_GROUP
,并将config.txt
文件内的内容复制进去。
如果没有安装Nacos的可以访问:Windows如何安装Nacos-优快云博客
他可能会弹出这个页面,是没有关系的,点击确认就行
步骤4
修改Seata服务的配置,具体包括:
1.找到seata主目录
2.进入conf
目录下编辑application.yml
文件
3.修改27行,将config配置中心改成nacos,可参考application.example.yml
文件
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: 127.0.0.1:8848
namespace:
group: SEATA_GROUP
username:
password:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key: ""
#secret-key: ""
data-id: seataServer.properties
4.在修改下面的registry的type为nacos
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace:
cluster: default
username:
password:
5.将store下的mode 参数注释掉,已经读取了nacos 无需配置
6.进入bin
目录并启动seata-server.bat
如图所示就代表已经配置好了
步骤5
application.yml配置 如下:
seata:
enabled: true
application-id: ${spring.application.name}
tx-service-group: huye_tx_group #此处配置自定义的seata事务分组名称
enable-auto-data-source-proxy: true #开启数据库代理
service:
vgroup-mapping:
huye_tx_group: default
config:
type: nacos
nacos:
server-addr: 127.0.0.1:8848
namespace:
group: SEATA_GROUP
data-id: seataServer.properties
registry:
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
namespace:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # nacos注册中心地址
namespace: private # 命名空间
group: SEATA_GROUP
sentinel:
transport:
dashboard: 127.0.0.1:8080 # Sentinel控制台地址
eager: true
所需的依赖:
<!--seata Cloud依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<!--排除seata-spring-boot-starter-->
<exclusions>
<exclusion>
<artifactId>seata-spring-boot-starter</artifactId>
<groupId>io.seata</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
seata YAML配置参考
seata.enabled:是否启用Seata。
seata.application-id:Seata应用ID,通常使用Spring应用程序名称。
seata.tx-service-group:Seata事务服务组ID,通常使用${spring.application.name}-fescar-service-group。
seata.service.vgroup-mapping:Seata服务分组映射。
seata.service.group-default:Seata服务默认配置。
seata.registry.type:Seata注册中心类型,这里使用的是Nacos。
seata.registry.nacos.server-addr:Nacos注册中心地址,从Spring Cloud配置中心获取。
seata.registry.nacos.namespace:Nacos注册中心命名空间,从Spring Cloud配置中心获取。
seata.registry.nacos.group:Nacos注册中心分组。
seata.registry.nacos.cluster:Nacos注册中心集群。
seata.config.type:Seata配置中心类型,这里使用的是Nacos。
seata.config.nacos.server-addr:Nacos配置中心地址,从Spring Cloud配置中心获取。
seata.config.nacos.namespace:Nacos配置中心命名空间,从Spring Cloud配置中心获取。
seata.config.nacos.group:Nacos配置中心分组。
seata.config.nacos.cluster:Nacos配置中心集群。