Seata融合Nacos

本文详细指导如何将Seata分布式事务解决方案与Nacos配置中心整合,包括下载Seata源码、配置application.yml、创建数据库表、设置Nacos配置以及调整存储模式等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Seata远端配置

步骤1

步骤2

步骤3

步骤4

1.找到seata主目录

2.进入conf目录下编辑application.yml文件

3.修改27行,将config配置中心改成nacos,可参考application.example.yml文件

4.在修改下面的registry的type为nacos

       5.将store下的mode 参数注释掉,已经读取了nacos 无需配置

      6.进入bin目录并启动seata-server.bat

步骤5

所需的依赖:

seata YAML配置参考


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配置中心集群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值