SpringCloud集成Seata并使用Nacos做注册中心与配置中心

简介: SpringCloud集成Seata并使用Nacos做注册中心与配置中心

本文为博主原创,未经允许不得转载:

目录:

  1. 下载并启动Seata Server,并指定nacos作为配置中心和注册中心

  2. 同步seata server的配置到nacos

  3. 启动Seata Server

  4. Seata整合到Spring Cloud微服务

  5. 接入问题总结:

  6.demo项目gitee 链接: https://gitee.com/xiangbaxiang/seata-nacos-demo

1. 下载并启动Seata Server,并指定nacos作为配置中心和注册中心

  1.1 下载地址:http://seata.io/zh-cn/blog/download.html

    

  1.2 通过 seata 的 conf 目录下的 file.conf 指定server 端存储模式:

    支持 file ,db , redis 三种方式:

      file:(默认)单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高(默认)

      db:(5.7+)高可用模式,全局事务会话信息通过db共享,相应性能差些

      redis:Seata-Server 1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置适合当前场景的redis持久化配置

  1.3 在 register.conf 指定注册中心:

                           

  1.4 在 register.conf 指定配置中心:

      

  注意:客户端配置registry.conf使用nacos时也要注意group要和seata server中的 group 一致,默认group是"DEFAULT_GROUP"

2. 同步seata server的配置到nacos

  先启动本地的nacos  

  获取/seata/script/config-center/config.txt,修改配置信息

    

  seata 从1.4 之后,seata 的安装包中去除了 同步的配置文件,可以从这个目录中获取https://github.com/seata/seata/tree/1.3.0/script 

  配置事务分组, 要与客户端配置的事务分组一致

    (客户端properties配置:spring.cloud.alibaba.seata.tx‐service‐group=my_test_tx_group)

                       

  通过脚本配置参数同步到Nacos

sh ${SEATAPATH}/script/config‐center/nacos/nacos‐config.sh ‐h localhost ‐p 8848 ‐g SEATA_GROUP ‐t 5a3c7d6c‐f497‐4d68‐a71a‐2e5e3340b3ca

    参数说明:

      -h: host,默认值 localhost

      -p: port,默认值 8848

      -g: 配置分组,默认值为 'SEATA_GROUP'

      -t: 租户信息,对应 Nacos 的命名空间ID字段, 默认值为空。

   也可以直接使用以下命令进行同步

sh nacos‐config.sh ‐h localhost ‐p 8848 ‐g SEATA_GROUP

3. 启动Seata Server

    启动Seata Server命令

bin/seata‐server.sh

    启动成功,默认端口8091

4. Seata整合到Spring Cloud微服务

  业务场景:

    用户下单,整个业务逻辑由三个微服务构成:

    仓储服务:对给定的商品扣除库存数量。

    订单服务:根据采购需求创建订单。

    帐户服务:从用户帐户中扣除余额。

  4.1导入依赖:

<!‐‐ seata‐‐> 
 <dependency>
    <groupId>com.alibaba.cloud</groupId> 
    <artifactId>spring‐cloud‐starter‐alibaba‐seata</artifactId> 
    <exclusions> 
        <exclusion> 
            <groupId>io.seata</groupId> 
            <artifactId>seata‐all</artifactId> 
        </exclusion> 
    </exclusions> 
</dependency> 
 <dependency> 
    <groupId>io.seata</groupId> 
    <artifactId>seata‐all</artifactId> 
    <version>1.4.0</version> 
 </dependency> 
 <!‐‐nacos 注册中心‐‐> 
 <dependency> 
    <groupId>com.alibaba.cloud</groupId> 
    <artifactId>spring‐cloud‐starter‐alibaba‐nacos‐discovery</artifactId> 
 </dependency> 
 <dependency>
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring‐cloud‐starter‐openfeign</artifactId> 
    </dependency> 
<dependency> 
    <groupId>com.alibaba</groupId> 
    <artifactId>druid‐spring‐boot‐starter</artifactId> 
    <version>1.1.21</version> 
</dependency> 
<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql‐connector‐java</artifactId> 
    <scope>runtime</scope> 
    <version>8.0.16</version> 
</dependency> 
<dependency> 
    <groupId>org.mybatis.spring.boot</groupId> 
    <artifactId>mybatis‐spring‐boot‐starter</artifactId> 
    <version>2.1.1</version> 
</dependency>
<dependency>
  <groupId>io.seata</groupId>
  <artifactId>seata‐spring‐boot‐starter</artifactId>
  <version>1.4.0</version>
</dependency>

  4.2 微服务对应数据库中添加undo_log

CREATE TABLE `undo_log` ( 
 `id` bigint(20) NOT NULL AUTO_INCREMENT, 
 `branch_id` bigint(20) NOT NULL, 
 `xid` varchar(100) NOT NULL, 
 `context` varchar(128) NOT NULL, 
 `rollback_info` longblob NOT NULL, 
 `log_status` int(11) NOT NULL, 
 `log_created` datetime NOT NULL, 
 `log_modified` datetime NOT NULL, 
 0 PRIMARY KEY (`id`), 
 UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) 
 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

  4.3 在yml中配置

seata:
  enabled: true
  application-id: ${spring.application.name}
  # seata 服务分组,要与服务端nacos‐config.txt中service.vgroup_mapping的后缀对应 
  tx-service-group: my_test_tx_group
  config:
   # 指定nacos作为配置中心 
    type: nacos
    nacos:
      namespace:
      serverAddr: 127.0.0.1:8848
      group: SEATA_GROUP
  registry:
    # 指定nacos作为注册中心 
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      namespace:

 

  在事务发起者中添加@GlobalTransactional注解

@GlobalTransactional

5. 接入问题总结:

  一般大多数情况下都是因为配置不匹配导致的:

  1.检查现在使用的seata服务和项目maven中seata的版本是否一致

  2.检查tx-service-group,nacos.cluster,nacos.group参数是否和Seata Server中的配置一致

  跟踪源码:seata/discover包下实现了RegistryService#lookup,用来获取服务列表

6.demo项目gitee 链接: https://gitee.com/xiangbaxiang/seata-nacos-demo

  在查看并使用该项目时,请先查看 ReadMe.md中的相关介绍。

标签: spring cloud

目录
相关文章
|
3月前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
744 14
|
4月前
|
网络协议 Java Nacos
SpringCloudAlibaba-Seata2.0.0与Nacos2.2.1
检查 Nacos 控制台,确认 Seata 服务器和 Spring Boot 应用已成功注册。 - 通过执行全局事务验证 Seata 的分布式事务管理功能。
489 31
|
4月前
|
监控 Java Nacos
使用Spring Boot集成Nacos
通过上述步骤,Spring Boot应用可以成功集成Nacos,利用Nacos的服务发现和配置管理功能来提升微服务架构的灵活性和可维护性。通过这种集成,开发者可以更高效地管理和部署微服务。
672 17
|
4月前
|
Java 关系型数据库 数据库
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
272 1
|
6月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
119 5
|
6月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
121 4
|
6月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
136 3
|
6月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
314 3
|
8月前
|
SQL NoSQL 数据库
SpringCloud基础6——分布式事务,Seata
分布式事务、ACID原则、CAP定理、Seata、Seata的四种分布式方案:XA、AT、TCC、SAGA模式
SpringCloud基础6——分布式事务,Seata
|
9月前
|
安全 Nacos 数据安全/隐私保护
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
本文详细介绍了如何在微服务环境下从 Nacos 1.3.0 升级到 2.3.0,并确保 Seata 各版本的兼容性。作者小米分享了升级过程中的关键步骤,包括备份配置、更新鉴权信息及验证测试等,并解答了常见问题。通过这些步骤,可以帮助读者顺利完成升级并提高系统的安全性与一致性。
224 8
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置