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

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 、 redis
    mode: db
    db:
  datasource: druid
  db-type: mysql
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true
  user: xxx #账号
  password: xxx #密码
  min-conn: 10
  max-conn: 100
  global-table: global_table
  branch-table: branch_table
  lock-table: lock_table
  distributed-lock-table: distributed_lock
  query-limit: 1000
  max-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, sofa
    type: nocos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      namespace: 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 # 注册中心类型 nacos
    nacos:
      server-addr: 127.0.0.1:8848 # nacos地址
#      namespace:  # namespace,默认为空,会映射到public
#      group: DEFAULT_GROUP  # 分组,默认是DEFAULT_GROUP
      application: seata-server # seata服务名称
#      cluster: default #集群,默认是default
  tx-service-group: my_test_tx_group # 事务组名称
  service:
    vgroup-mapping: # 事务组与cluster的映射关系
      my_test_tx_group: default
  data-source-proxy-mode: XA

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

在这里插入图片描述

4.3 测试

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


http://www.kler.cn/a/574028.html

相关文章:

  • UE4 组件 (对话组件)
  • 6. PromQL的metric name(在node exporter复制下来交给AI解释的)
  • SpringCloud系列教程(十三):Sentinel流量控制
  • 【Elasticsearch】Index Lifecycle Management
  • C语言基础2
  • 设计模式 + java8方法引用 实现任意表的过滤器
  • 多线程-CompletableFuture
  • AI推理革新:Dynasor-CoT如何提升复杂任务效率
  • 【AI学习从零至壹】Pytorch逻辑回归
  • FreeRTOS 任务管理与运行时间统计:API 解析与配置实践
  • 模块15.常用API
  • QT.....................................5
  • Redis 脚本:高效数据管理的利器
  • C++ list(双向链表)
  • 决策树(Decision Tree)基础知识
  • 网络安全可以从事什么工作?
  • 洛谷 P1480 A/B Problem(高精度详解)c++
  • 探索自适应学习在企业培训系统中的优势
  • 2025-03-06 学习记录--C/C++-C语言 函数参数传递的两种主要方法
  • NVIDIA Jetson Nano的国产替代,基于算能BM1684X+FPGA+AI算力盒子,支持deepseek边缘部署