springcloud alibaba 整合seata的TCC

devtools/2024/9/25 8:22:13/

一、seata服务端搭建同上篇。

Seata的AT模式客户端两阶段提交流程源码分析

二、seata客户端的结构

1.示例DEMO工程 下单,扣余额, 减库存。

2. MAVEN配置。

    父工程:由于spring-cloud-starter-alibaba-seata依赖的seata-spring-boot-starter项目版本太低,所以要排除,使用1.4.2的版本。

		<seata.version>1.4.2</seata.version><spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><!-- 排除依赖,指定版本和服务端一致 --><exclusions><exclusion><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId></exclusion></exclusions></dependency><dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>${seata.version}</version></dependency>

子模块:只需要引入基本的WEB框架。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--eureka client-->
<!--		<dependency>-->
<!--			<groupId>org.springframework.cloud</groupId>-->
<!--			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<!--		</dependency>--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>

3.配置文件

BOOTSTRAP配置

spring.profiles.active=dev
#spring.application.name=joydayspring.cloud.nacos.username=nacos
spring.cloud.nacos.password = nacos
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.group=DEFAULT_GROUP
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.config.server-addr}seata.config.nacos.data-id=storageServerSeata.properties
seata.config.nacos.group=MALL_GROUP
seata.config.nacos.namespace=seata
seata.config.nacos.server-addr=${spring.cloud.nacos.config.server-addr}
seata.config.nacos.username=${spring.cloud.nacos.username}
seata.config.nacos.password=${spring.cloud.nacos.password}
seata.config.type=nacosseata.registry.nacos.application=seata-server
seata.registry.nacos.group=SEATA_GROUP
seata.registry.nacos.namespace=seata
seata.registry.nacos.server-addr=${spring.cloud.nacos.config.server-addr}
seata.registry.nacos.username=${spring.cloud.nacos.username}
seata.registry.nacos.password=${spring.cloud.nacos.password}
seata.registry.type=nacosseata.tx-service-group=mall_tx_group
seata.enableAutoDataSourceProxy=false

这次引入的SEATA配置中心要特别注意,data-id无效,被直接用具体的KEY所覆盖了,所以只能直接配置具体的TEXT类型KEY。

SEATA注册中心的目的为从NACOS中寻找服务名为seata-server的服务的实例,作为SEATA的服务端。

这里还有一个细节要特别注意,首先程序中配置了事务分组,程序会通过用户配置的配置中心去寻找service.vgroupMapping .事务分组配置项,取得配置项的值就是TC集群的名称,

这里就是DEFAULT,所以SEATA的服务端就必须注册到集群名称为DEFAULT否则客户端找不到集群。

拿到集群名称程序通过一定的前后缀+集群名称去构造服务名,各配置中心的服务名实现不同。拿到服务名去相应的注册中心去拉取相应服务名的服务列表,获得后端真实的TC服务列表。 3.为什么这么设计,不直接取服务名? 这里多了一层获取事务分组到映射集群的配置。这样设计后,事务分组可以作为资源的逻辑隔离单位,当发生故障时可以快速failover。

三.SEATA读取NACOS配置流程分析。

1.初始化全局事务扫描器,从这里可以看到

SeataProperties的参数不能在NACOS配置。是由seata-springboot-start来自动配置的。

因为我们是用的TCC模式,所以不需要做数据源代理,也不会影响程序性能。

seata.enableAutoDataSourceProxy=false

2.初始化NACOS配置实例。

3.获取NACOS中某个KEY的配置

先读本地, 没有去远程NACOS服务器请求接口

这里我们看到从NACOS读到的配置数据。

这里特别有一点,会根据事务分组,从NACOS注册中心获取SEATA服务端的集群的IP信息。

接下来我们看到,读到了我们的自定义集群名称。


http://www.ppmy.cn/devtools/12070.html

相关文章

【数据库】MySQL分页查询

分页查询&#xff1a; 数据记录条数过多的时候&#xff0c;需要分页来显示。 语法&#xff1a; select 查询字段 from 表名 where ....等等 limit offset&#xff08;开始记录索引,是从0开始的&#xff09;,size&#xff08;要取出的条数&#xff09;&#xff1b; 案例&…

如何使用WEB前端模板

我最近想搞一搞前端&#xff0c;前端属实不太行&#xff0c;像前端搞个模板直接套一下。但是发现下载下来也有点不知道怎么用起来&#xff0c;这里我就把我的一个Bootstrap工程套用模板的具体过程记录一下。 首先创建一个前端工程&#xff0c;我这里用的是Bootstrap5&#xff…

前端面试笔记vue

vue2 生命周期 beforeCreate&#xff1a;无data、methods、dom created&#xff1a;有data、methods&#xff0c;无dom beforeMount&#xff1a;有data&#xff0c;无dom mounted&#xff1a;有data&#xff0c;有dom beforeUpdate updated deforeDestroy destroy&#xff1a…

Octopus+: An RDMA-Enabled Distributed Persistent Memory File System——泛读笔记

TOS 2021 Paper 分布式元数据论文阅读笔记整理 问题 非易失性存储器&#xff08;NVM&#xff09;和远程直接存储器访问&#xff08;RDMA&#xff09;在存储和网络硬件中提供了极高的性能。然而&#xff0c;现有的分布式文件系统隔离了文件系统和网络层&#xff0c;而且分层的…

git工作流程简介及常用命令

1、git工作流程 1&#xff0e;从远程仓库中克隆或拉取代码到本地仓库(clone/pull) 2&#xff0e;从本地进行代码修改 3&#xff0e;在提交前先将代码提交到暂存区 4&#xff0e;提交到本地仓库。本地仓库中保存修改的各个历史版本 5&#xff0e;修改完成后&#xff0c;需要…

【图文教程】在PyCharm中导入Conda环境

文章目录 &#xff08;1&#xff09;在Anaconda Prompt中新建一个conda虚拟环境&#xff08;2&#xff09;使用PyCharm打开需要搭建环境的项目&#xff08;3&#xff09;配置环境 &#xff08;1&#xff09;在Anaconda Prompt中新建一个conda虚拟环境 conda create - myenv py…

笔记:定义一个函数,要求从键盘输人两个数,调用该函数得出两个数的最大公约数,并显示在屏幕上。

文章目录 前言一、什么是调用该函数得出两个数的最大公约数&#xff1f;二、编写代码1.代码2.优化代码 总结 前言 题目&#xff1a;定义一个函数&#xff0c;要求从键盘输人两个数&#xff0c;调用该函数得出两个数的最大公约数&#xff0c;并显示在屏幕上。 在数学中&#x…

【后端】python2和python3的语法差异

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为何要了解不同版本的语法差异二、python2和python3的语法差异三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使…