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

目录
相关文章
|
20天前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
39 1
|
21天前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
【8月更文挑战第30天】在Jenkins服务器中,git和Gitee是常用的代码拉取终端。Git作为分布式版本控制系统,具备出色的灵活性和可扩展性;而Gitee则在国内网络环境下表现更佳,适合团队协作。Git配置包括安装、设置用户信息及生成SSH密钥等步骤;Gitee配置也类似,需注册账号、创建仓库、配置基本信息并设置远程仓库地址。开发人员提交代码后,可通过Webhook、定时轮询或事件监听等方式触发Jenkins动作,确保持续集成和部署高效运行。正确配置这些触发机制并通过测试验证其有效性至关重要。
42 2
|
17天前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
安装Git、配置用户信息、生成SSH密钥以及在Gitee上创建项目仓库等。
43 0
|
20天前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
37 0
|
29天前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
|
1月前
|
Java Nacos Docker
"揭秘!Docker部署Seata遇上Nacos,注册成功却报错?这些坑你不得不防!一网打尽解决秘籍,让你的分布式事务稳如老狗!"
【8月更文挑战第15天】在微服务架构中,Nacos搭配Seata确保数据一致性时,Docker部署Seata后可能出现客户端连接错误,如“can not connect to services-server”。此问题多由网络配置不当、配置文件错误或版本不兼容引起。解决策略包括:调整Docker网络设置确保可达性;检查并修正`file.conf`和`registry.conf`中的Nacos地址和端口;验证Seata与Nacos版本兼容性;修改配置后重启服务;参考官方文档和最佳实践进行配置。通过这些步骤,能有效排除故障,保障服务稳定运行。
36 0
|
1月前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
42 0
|
1月前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
83 0
|
1月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
79 0
|
2月前
|
Java Nacos 数据库
使用 nacos 搭建注册中心及配置中心
使用 nacos 搭建注册中心及配置中心
68 5