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

目录
相关文章
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
1188 148
|
存储 Java Nacos
Spring Cloud+Nacos+KMS 动态配置最佳实践
本文讲述了 Spring Cloud 应用中结合 Nacos 实现了运行期配置动态更新的功能,以及在此基础上结合 KMS 在不改动代码的情况下对应用使用的敏感配置进行保护,解决将配置迁移到 Nacos 中可能存在的数据安全顾虑,并对其底层工作原理做了简单介绍。
1452 157
|
10月前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
4148 14
|
12月前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
消息中间件 Java 数据库
新版 Seata 集成 RocketMQ事务消息,越来越 牛X 了!阿里的 Seata , yyds !
这里 借助 Seata 集成 RocketMQ 事务消息的 新功能,介绍一下一个新遇到的面试题:如果如何实现 **强弱一致性 结合**的分布式事务?
新版 Seata 集成 RocketMQ事务消息,越来越 牛X 了!阿里的 Seata , yyds !
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
消息中间件 运维 数据库
Seata框架和其他分布式事务框架有什么区别
Seata框架和其他分布式事务框架有什么区别
465 153
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
1144 160
|
数据库
如何在Seata框架中配置分布式事务的隔离级别?
总的来说,配置分布式事务的隔离级别是实现分布式事务管理的重要环节之一,需要认真对待和仔细调整,以满足业务的需求和性能要求。你还可以进一步深入研究和实践 Seata 框架的配置和使用,以更好地应对各种分布式事务场景的挑战。
592 160

热门文章

最新文章