当前位置: 首页 > news >正文

Spring Cloud Alibaba学习 5- Seata入门使用

Spring Cloud Alibaba学习 5- Seata入门使用

Seata是Spring Cloud Alibaba中用于分布式事务管理的解决方案

一. Seata的基本概念

1. Seata的三大角色

1> TC (Transaction Coordinator) - 事务协调者

  • 维护全局和分支事务的状态,驱动全局事务提交或回滚。TC作为单独的服务端部署

2> TM (Transaction Manager) - 事务管理器

  • 定义全局事务的范围:开始全局事务、提交或回滚全局事务。

3> RM (Resource Manager) - 资源管理器

  • 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

2. Seata的四种事务模式

这里只介绍粗略地介绍AT模式,其他模式见官方的文档 Seata各事务模式 | Apache Seata

  • AT

AT模式是基于二阶段提交

  • 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
  • 二阶段:
    • 提交异步化,非常快速地完成。
    • 回滚通过一阶段的回滚日志进行反向补偿。
  • TCC
  • Saga
  • XA

二. Spring Cloud 整合 Seata

1. Seata服务器下载和启动

可以参考Seata官方文档 新人文档 | Apache Seata

1.1 下载 Seata服务端

下载地址:Seata服务端下载

一开始下载的 Apache Seata(incubating),不知道怎么启动,所以建议下载非Apache的版本,我下载的版本是1.7.0

2. 运行Seata服务端

Seata的运行模式有三种

  • file:单机模式,将信息存在内存中并持久化本地文件root.data,性能较高(默认)

  • db:高可用模式,将信息存在数据库中,性能次于单机模式

  • redis

2.1 以默认配置运行

下载完成后,双击运行 /seata/bin/seata-server.bat,启动成功如下图:

在这里插入图片描述

默认运行在 127.0.0.1:7091,以单机模式运行,如果没在配置文件修改过密码,默认账号密码都是seata

在这里插入图片描述

2.2 以db模式运行
2.2.1 建表

先在Mysql建数据库seata,然后运行/seata/script/server/db/mysql.sql,对应表 global_table(全局事务)、branch_table(分支事务)、lock_table(全局锁)、distributed lock(分布式锁)

2.2.2 修改 store.mode

修改/seata/conf/application.yml

store:# support: file 、 db 、 redismode: dbdb:datasource: druiddb-type: mysqldriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=trueuser: xxx #账号password: xxx #密码min-conn: 10max-conn: 100global-table: global_tablebranch-table: branch_tablelock-table: lock_tabledistributed-lock-table: distributed_lockquery-limit: 1000max-wait: 5000

启动报错:

在这里插入图片描述

究其原因,是Mysql的驱动和我的Mysql的版本不匹配,打开/seata/lib/jdbc`,发现有两个驱动

image-20250306114521333

这下搞懂了,启动seata时会默认用 5.1.42的驱动程序,此时将5.1.42 的驱动拿掉就可以了,再次启动,此时可以正常访问

D:\seata\seata\bin>seata-server.bat -m db

在这里插入图片描述

3 配置Nacos注册中心 (可选)

  registry: # 注册中心(服务发现)# support: nacos, eureka, redis, zk, consul, etcd3, sofatype: nocosnacos:application: seata-serverserver-addr: 127.0.0.1:8848namespace: public

可以看到Nacos上可以看到seata正在运行的服务了

在这里插入图片描述

配置中心的配置也和上述类似,这里就不过多赘述了。

4. 项目整合 Seata

4.1 引入 Seata 相关依赖

老版本的Spring Cloud和个组件的版本对照:版本说明 · alibaba/spring-cloud-alibaba Wiki

在公共模块下引入Seata

<!--seata-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
4.2 配置 Seata

配置建议参考官方文档:事务分组介绍 | Apache Seata

我这里的配置如下:

seata:registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址type: nacos # 注册中心类型 nacosnacos:server-addr: 127.0.0.1:8848 # nacos地址
#      namespace:  # namespace,默认为空,会映射到public
#      group: DEFAULT_GROUP  # 分组,默认是DEFAULT_GROUPapplication: seata-server # seata服务名称
#      cluster: default #集群,默认是defaulttx-service-group: my_test_tx_group # 事务组名称service:vgroup-mapping: # 事务组与cluster的映射关系my_test_tx_group: defaultdata-source-proxy-mode: XA

配置好了,启动服务,查看Seata服务端cmd窗口,可以看到 TM 事务管理器 和 RM 资源管理器已经启动

在这里插入图片描述

4.3 测试

官方提供了示例测试seata-samples/at-samples,后续有业务我再进行补充。

http://www.lryc.cn/news/547715.html

相关文章:

  • WebAssembly技术及应用了解
  • Deepseek中的MoE架构的改造:动态可变参数激活的MoE混合专家架构(DVPA-MoE)的考虑
  • NodeJS学习笔记
  • 【交通网络拓扑图实现原理深度解析】
  • 【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
  • NO2.C++语言基础|C++和Java|常量|重载重写重定义|构造函数|强制转换|指针和引用|野指针和悬空指针|const修饰指针|函数指针(C++)
  • 【CSS】---- 纯 CSS 实现无限滚动轮播
  • 软考架构师笔记-计算机网络
  • Spring MVC 页面重定向返回后通过nginx代理 丢失端口号问题处理
  • 道可云人工智能每日资讯|亚马逊云业务部门成立智能体人工智能团队
  • 算力100问☞第72问:算力与算法、数据的关系是什么?
  • AI-Ollama本地大语言模型运行框架与Ollama javascript接入
  • Java开发的AI应用框架简述——LangChain4j、Spring AI、Agent-Flex
  • 【算法day2】无重复字符的最长子串 两数之和
  • HarmonyOS:基于hmrouter实现Page的生命周期监听
  • DeepSeek + 飞书多维表格搭建你的高效工作流
  • uniapp+<script setup lang=“ts“>使用 uni.$emit和uni.$on全局传递数据
  • 综合使用pandas、numpy、matplotlib、seaborn库做数据分析、挖掘、可视化项目
  • docker中kibana启动后,通过浏览器访问,出现server is not ready yet
  • 十、Redis 主从复制:原理解析、配置实践与优化策略
  • 使用JMeter(组件详细介绍+使用方式及步骤)
  • lamp平台的应用
  • 蓝桥杯4T平台(串口打印电压值)
  • 使用ASIWebPageRequest库编写Objective-C下载器程序
  • 代码随想录算法训练营 | 图论 | 孤岛总面积、沉没孤岛
  • 迷你世界脚本出生点接口:Spawnport
  • 双链路提升网络传输的可靠性扩展可用带宽
  • Pytest测试用例执行跳过的3种方式
  • 【蓝桥杯】每天一题,理解逻辑(3/90)【Leetcode 快乐数】
  • 深度学习Save Best、Early Stop