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

目录:

  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中的相关介绍。

SpringCloud集成Seata并使用Nacos做注册中心与配置中心的更多相关文章

  1. springcloud集成zookeeper,并使用configserver作为服务的配置中心

    1.springcloud集成zookeeper: 做法: 出现问题: 版本不一致导致出现keepError: 解决:服务器的zookeeper要与客户端的zookeeper一致,才可以. 2.使用c ...

  2. Spring cloud Alibaba Nacos服务注册发现和配置中心

    Nacos(官方网站:http://nacos.io)是一个易于使用的平台,旨在用于动态服务发现,配置和服务管理.它可以帮助您轻松构建云本机应用程序和微服务平台. Nacos = Eureka + c ...

  3. 学习一下 SpringCloud (六)-- 注册中心与配置中心 Nacos、网关 Gateway

    (1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...

  4. SpringCloudAlibaba注册中心与配置中心之利器Nacos实战与源码分析(上)

    不断踩坑并解决问题是每个程序员进阶到资深的必要经历并以此获得满足感,而不断阅读开源项目源码和总结思想是每个架构师成长最佳途径.本篇拉开SpringCloud Alibaba最新版本实战和原理序幕,以工 ...

  5. 【十次方微服务后台开发】Day02:加密与JWT鉴权、微服务注册中心、配置中心、熔断器、网关、消息总线、部署与持续集成、容器管理与监控Rancher、influxDB、grafana

    一.密码加密与微服务鉴权JWT 1.BCrypt密码加密 Spring Security 提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用B ...

  6. Spring Cloud+nacos+Feign,实现注册中心及配置中心

    写在前面 注册中心.配置中心的概念就不在这里解释了.发现服务原来一直用的是Eureka,因为这家伙闭源了,不爽.然后就发现了nacos,阿里巴巴的,好东西,一个搞定注册中心和配置中心.官网:https ...

  7. spring boot / cloud (十七) 快速搭建注册中心和配置中心

    spring boot / cloud (十七) 快速搭建注册中心和配置中心 本文将使用spring cloud的eureka和config server来搭建. 然后搭建的模式,有很多种,本文主要聊 ...

  8. Dubbo+Nacos做注册中心和配置中心

    项目结构 相关代码 EchoService public interface EchoService { String echo(String msg); } DefaultEchoService @ ...

  9. Nacos注册中心和配置中心流程原理

    一.Nacos注册中心 1.服务启动后---->服务注册原理 springCloud集成Nacos实现原理: 服务启动时,在spring-cloud-commons包下 spring.facto ...

  10. 服务注册发现、配置中心集一体的 Spring Cloud Consul

    前面讲了 Eureka 和 Spring Cloud Config,今天介绍一个全能选手 「Consul」.它是 HashiCorp 公司推出,用于提供服务发现和服务配置的工具.用 go 语言开发,具 ...

随机推荐

  1. transformer模型

    Transformer由谷歌团队在论文<Attention is All You Need>提出,是基于attention机制的模型,最大的特点就是全部的主体结构均为attention. ...

  2. HDU-2159 二维背包

    最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xhd升掉最后一级还需n的经 ...

  3. 如何通过port-forward命令在本地访问 k8s 集群服务

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享 概述 在我们访问k8s中的pod服务时,一般通过node port映射pod端口进行访问,还有一种是通过ingress或者i ...

  4. 【eBPF-02】入门:基于 BCC 框架的程序进阶

    本文是 eBPF 系列的第二篇文章,我们来学习 eBPF BCC 框架的进阶用法,对上一篇文章中的代码进行升级,动态输出进程运行时的参数情况. 主要内容包括: 通过 kprobe 挂载内核事件的 eB ...

  5. React 类组件转换为函数式

    函数式的 React 组件更加现代,并支持有用的 hooks,现在流行把旧式的类组件转换为函数式组件.这篇文章总结了转换的一些通用的步骤和陷阱. 通用替换 定义 从 class (\w+) exten ...

  6. Python——第四章:生成器(Generators)

    生成器(generator):    生成器的本质就是迭代器 创建生成器的两种方案:        1. 生成器函数        2. 生成器表达式 生成器函数        生成器函数中有一个关键 ...

  7. JavaFx FXML入门(五)

    JavaFx FXML入门(五) JavaFX 从入门入门到入土系列 JavaFx的FXML类似安卓中的视图文件,可以添加样式,添加css,添加id然后在java代码中绑定点击事件.可以使用工具编辑: ...

  8. 11、层叠布局(Stack、Align、 Positioned)

    Flutter Stack组件 Stack表示堆的意思,我们可以用Stack或者Stack结合Align或者Stack结合 Positiond来实现页面的定位 布局  Alignment(对齐)类是用 ...

  9. 六步带你体验EDS交换数据全流程

    本期我们将走进XX医疗集团向某慢病院共享数据的场景,如何通过EDS完成数据交换,进而实现医疗数据的安全可控共享. 本文分享自华为云社区<[EDS从小白到专家]第1期-六步带你体验EDS交换数据全 ...

  10. CG行业云渲染服务的演进之路

    摘要:影视动画.特效制作等行业渲染需求量增多,4K/6K以及各高分辨率会陆续成为主流,本地算力与存储资源已无法满足现有任务量.而随着大环境的演变,CG行业发展已进入发展快车道.来自赞奇科技的CEO金伟 ...