赞
踩
目录
2.进入conf目录下编辑application.yml文件
3.修改27行,将config配置中心改成nacos,可参考application.example.yml文件
5.将store下的mode 参数注释掉,已经读取了nacos 无需配置
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
在 MySQL 中,创建一个名为 seata 的数据库实例,并在该数据库内执行以下 SQL。
该SQL也可以在seata目录下:script\server\db 中找到mysql.sql
每个微服务对应的数据库中添加回滚日志表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;

在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-CSDN博客
他可能会弹出这个页面,是没有关系的,点击确认就行
修改Seata服务的配置,具体包括:
conf
目录下编辑application.yml
文件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
- 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:
bin
目录并启动seata-server.bat
如图所示就代表已经配置好了
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.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配置中心集群。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。