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

(五)Spring Cloud Alibaba 2023.x:Seata 分布式事务配置与实现

目录前言准备安装seata下载seata配置seata数据库创建undo_log表seata配置文件启动seata服务项目集成引入seata依赖yml文件配置seata模拟下单生产者提供扣减库存消费者进行下单模拟下单前言在微服务架构中分布式事务是确保多个服务之间数据一致性和完整性的关键。随着微服务的拆分传统的单体事务无法满足跨服务的事务管理需求这时分布式事务变得尤为重要。Seata作为一款轻量级、高性能的分布式事务解决方案通过提供全局事务管理、自动回滚等功能帮助开发者轻松处理分布式系统中的事务问题避免了数据不一致和服务失败的风险。准备jdk17maven3.9.4idea2023spring cloud: 2023.0.1.0spring cloud alibaba: 2023.0.1源码获取GitHub - /spring-cloud-alibaba-base-demo: 基于spring cloud alibaba生态快速构建微服务脚手架安装seata分布式事务seata是一个单独的服务通过这个服务来控制管理业务中的事物所以我们首先的安装配置该seata服务下载seatagithub下载地址https://github.com/apache/incubator-seata/releases百度云地址百度网盘 请输入提取码 提取码: 92h6本篇seata版本为1.8尽量保持一致。seata下载到本地后完整目录如下配置seata数据库进入本地seata项目的db文件夹中在mysql数据库中创建一个seata数据库这里博主使用的是mysql数据库所以选择mysql.sql执行创建了4个表global_table记录全局事务的状态信息。主要用于保存全局事务的唯一标识XID和当前执行状态branch_table记录分支事务的信息。用于关联全局事务中的各个参与分支事务追踪分支的执行状态。lock_table保存全局锁信息。用于防止并发操作对数据造成冲突实现事务数据的锁定。distributed_lock分布式锁表。用于在 Seata 中协调全局的分布式锁防止资源竞争。创建undo_log表在业务数据库中创建undo_log表CREATE TABLE undo_log ( branch_id bigint(20) NOT NULL COMMENT branch transaction id, xid varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT global transaction id, context varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT undo_log context,such as serialization, rollback_info longblob NOT NULL COMMENT rollback info, log_status int(11) NOT NULL COMMENT 0:normal status,1:defense status, log_created datetime(6) NOT NULL COMMENT create datetime, log_modified datetime(6) NOT NULL COMMENT modify datetime, UNIQUE INDEX ux_undo_log(xid, branch_id) USING BTREE, INDEX ix_log_created(log_created) USING BTREE ) ENGINE InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT AT transaction mode undo table ROW_FORMAT Dynamic;Seata 使用AT 模式自动提交模式时undo_log表会存储业务操作前的镜像数据用于在事务失败时回滚数据到操作前的状态。Seata 在事务完成后(无论是提交还是回滚),会自动清理undo_log数据确保表的干净与高效运行。详细了解seata模式Seata AT 模式 | Apache Seataseata配置文件进入本地的seata项目的config文件中对application.yml文件内容进行修改,下面展示主要的核心配置修改seata: service: vgroup-mapping: dubbo_tx_group: default # 映射 dubbo_tx_group 到 default 服务组 tx-service-group: dubbo_tx_group # 事务服务组名称 config: # support: nacos, consul, apollo, zk, etcd3 type: file # 配置文件类型可以选择 nacos, apollo 等 file: name: file.conf # 使用 application.yml 作为配置文件 registry: # support: nacos, eureka, redis, zk, consul, etcd3, sofa type: nacos # 注册中心类型根据实际情况选择比如 nacos、eureka、zk 等 nacos: server-addr: 127.0.0.1:8848 # Nacos 注册中心地址示例 namespace: # Nacos 的命名空间默认空即可 group: SEATA_GROUP # Seata 在 Nacos 中的分组名 username: nacos # 如果 Nacos 需要登录验证请填入用户名 password: store: # support: file 、 db 、 redis 、 raft mode: db # 使用数据库存储模式也可以选择 file 或 redis db: datasource: druid # 数据源类型可以使用 druid、hikari 等 db-type: mysql # 数据库类型mysql、oracle、postgresql、mariadb 等 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/seata?useUnicodetruecharacterEncodingutf-8useSSLfalse user: root password: min-conn: 5 max-conn: 30 global-table: global_table branch-table: branch_table lock-table: lock_table query-limit: 100 max-wait: 5000主要配置说明tx-service-group事务组名称设置名称自定义。config: 配置中心可设置适配多个配置中心组件。本篇没有使用配置中心组件选择的是本地文件所以设置的是file。registry注册中心配置seata作为一个服务提供者也需要将服务注册到注册中心管理。这里选择nacos作为注册中心在自己的nacos服务中创建命名空间并在文件中进行替换配置。store 数据存储中心用于存储服务中的全局事务相关数据。这里选择使用的mysql作为存储中心替换自己的数据库配置即可。启动seata服务进入本地seata项目中bin文件夹中window用户双击seata-server.bat启动看到控制台打印上面的地址就表示启动成功了8091 : 表示seata服务的端口7091表示seata控制台的端口访问http://127.0.0.1:7091默认账号密码seata查看seata服务在nacos注册中心也注册成功项目集成根据前面4篇的博文目前我们已经创建了三个微服务引入seata依赖在消费者以及生产者服务都需要引入seata依赖!--分布式事务组件 seata-- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-seata/artifactId /dependencyyml文件配置seata消费者以及生产者服务的yml文件中都需要配置seata: server: address: 127.0.0.1:8091 tm: default-transaction-manager-type: AT # 默认使用 AT 模式 default-timeout: 30000 # 设置全局事务超时 application-id: ${spring.application.name} # 这里是应用的唯一标识可以根据你的服务名称设置 tx-service-group: dubbo_tx_group # 事务分组名称确保每个 seata 服务的 tx-service-group 一致 registry: type: nacos # 注册中心类型如 nacos若使用其他注册中心需要调整 nacos: server-addr: 127.0.0.1:8848 # Nacos 地址和端口 namespace: group: SEATA_GROUP username: nacos # 如果 Nacos 需要认证 password: config: type: nacos nacos: server-addr: 127.0.0.1:8848 # Nacos 地址和端口 namespace: group: SEATA_GROUP username: nacos # 如果 Nacos 需要认证 password: />注意该文件后缀必须是properties不能是yml官方要求。# 事务组名称 service.vgroupMapping.dubbo_tx_groupdefault service.enableDegradefalse service.disableGlobalTransactionfalse # 事务日志保留时间 server.undo.logSaveDays7 server.undo.logDeletePeriod86400000注意service.vgroupMapping.dubbo_tx_group 这段一定要写对不然项目会一直报错提示找不到该配置。其中后面的dubbo_tx_group必须是自己前面配置 seata文件中tx-service-group属性的值模拟下单数据库相关集成于配置本篇不在概述没有自己项目的可以使用本文开头提供的项目地址进行下载查看使用生产者提供扣减库存RestController public class DemoController { Autowired private SeataProductMapper seataProductMapper; GetMapping(value /test/seata/deInventory) void deInventorySeata(RequestParam(num) Integer num, RequestParam(productId) Integer productId) { seataProductMapper.deInventory(num, productId); } } Mapper public interface SeataProductMapper { Update(UPDATE xf_product SET num num - #{num} WHERE id #{productId}) void deInventory(Param(num) Integer num, Param(productId) Integer productId); }消费者进行下单模拟创建订单Mapper public interface SeataOrderMapper { Insert(INSERT INTO xf_order (user_id, product_id) values (#{userId}, #{productId})) void createOrder(Param(userId) Integer userId, Param(productId) Integer productId); }使用**GlobalTransactional** 实现分布式事务Service public class SeataService { Autowired private FeignService feignService; Autowired private SeataOrderMapper seataOrderMapper; GlobalTransactional(name seata-order, rollbackFor Exception.class) public String placeOrderSeata() { // 调用扣减库存的方法 feignService.deInventorySeata(1, 1); // 调用创建订单的方法 seataOrderMapper.createOrder(1, 1); // throw new RuntimeException(测试回滚); return 下单成功; }定义下单接口RestController public class FeignController { Autowired private SeataService seataService; /** * 使用分布式事务 seata 远程调用Feign * return */ GetMapping(value /seataOrFeignOrSentinel) public String seataOrder() { return seataService.placeOrderSeata(); } }模拟下单启动全部服务并请求下单接口在方法最后debug查看业务数据库undo_log中的数据存在2条操作记录查看seata数据库的全局事务表存在一条全局事务数据查看seata控制台统一正常展示了事务数据放开dedug重新查看相关表数据会发现数据已经清空。也可模拟异常情况查看相关业务表数据是否回滚来验证。注本文使用的是seata的AT模式业务相关表必须在一个库中如果涉及到多个库操作分布式事务考虑使用其他模式实现。至此spring cloud alibaba 微服务集成seata分布式事务完成了

相关文章:

(五)Spring Cloud Alibaba 2023.x:Seata 分布式事务配置与实现

目录 前言 准备 安装seata 下载seata 配置seata数据库 创建undo_log表 seata配置文件 启动seata服务 项目集成 引入seata依赖 yml文件配置seata 模拟下单 生产者提供扣减库存 消费者进行下单 模拟下单 前言 在微服务架构中,分布式事务是确保多个服务…...

(七)Spring Cloud Alibaba 2023.x:RocketMQ 消息队列配置与实现

目录 前言 准备 安装RocketMq服务 下载rocketmq服务 下载rocketmq 控制台 项目集成 引入依赖 生产者服务配置 消费者服务配置 发送队列消息 前言 在微服务架构中,异步消息通信是实现系统解耦、提高性能和增强系统可靠性的重要手段。在 Spring Cloud Alib…...

(CICD)自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)

一、平滑发布与灰度发布 **什么叫平滑:**在发布的过程中不影响用户的使用,系统不会因发布而暂停对外服务,不会造成用户短暂性无法访问; **什么叫灰度:**发布后让部分用户使用新版本,其它用户使用旧版本&am…...

企业碳排放权交易会计信息处理规范 免费下载

企业碳排放权交易会计信息处理规范(T/GDES 1—2016) 一、团体官方承诺 广东省节能减排标准化促进会发布的T/GDES 1—2016《企业碳排放权交易会计信息处理规范》团体标准遵循开放、公平、透明、协商一致和促进贸易和交流的原则,按照在本平台…...

鸿蒙原生应用开发进阶之路:Flutter工程师的鸿蒙转型与金融/保险应用实战

引言 随着鸿蒙系统(HarmonyOS)的持续演进和生态扩张,其“一次开发,多端部署”的理念吸引了众多开发者的目光。对于拥有Flutter开发经验的工程师而言,鸿蒙原生开发既是新的机遇,也是技术升级的挑战。特别是…...

什么是 OpenClaw

OpenClaw(曾用名 Clawdbot、Moltbot)是一款开源的个人 AI 助手平台,于 2026 年初在GitHub 上迅速走红,成为近年来增长最快的开源项目之一。它能够在用户自己的设备上本地运行,通过 WhatsApp、Telegram、Discord、飞书、…...

端侧AI 的定义与发展背景

大模型技术经历了参数竞赛与生成能力的突破后,行业焦点已从纯粹的“模型能力”转向“落地能力”。回顾人工智能近年来的发展,其主战场正经历一次深刻的转移。随着技术逐渐趋于同质化,AI 的下一步竞争,不再是“谁的模型更强”&…...

OmoFun 1.1.4 | 追番神器官方APP下载.官网入口

OmoFun动漫(又称“动漫共和国”)是一个深受二次元爱好者喜爱的高品质动漫聚合平台,致力于为用户提供全方位、无广告的沉浸式追番体验。该平台由专业团队运营,拥有庞大的内容储备,涵盖日本新番、国产原创动画、欧美热门…...

打卡信奥刷题(2949)用C++实现信奥题 P5878 奖品

P5878 奖品 题目描述 学校刚开完运动会,准备为尽可能多的同学评奖,并为每个人颁发一份奖品。一份奖品包括 NNN 个物品,如:555 支铅笔、101010 本练习薄等。每份奖品完全一样。虽然学校的保管室里还有一些办去年运动会后剩余的物品…...

某奢侈品品牌虚拟零售AI架构案例:用AI驱动的高端服务提升品牌价值

某奢侈品品牌虚拟零售AI架构案例:用AI驱动的高端服务提升品牌价值 引言:当奢侈品遇上AI,重新定义“高端服务” 凌晨1点,巴黎近郊的LuxuryX虚拟私域门店里,用户Elsa(一位连续3年的VVIP)正对着屏幕…...

Python基于flask-django考研学习系统的设计与实现

目录系统需求分析技术选型系统模块设计开发流程关键问题解决参考资源项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作系统需求分析 明确考研学习系统的核心功能需求,包括用户管理、学习资源…...

关于keil中编译器版本,也就是库不兼容问题的解决办法

问题现象:Error: C9511E: Unable to determine the current toolkit. Check that ARM_TOOL_VARIANT is set correctly. Check that your license details are correct in the License Management dialog of MDK. Additional information is available at:http://www…...

【最全】2026年OpenClaw(Clawdbot)本地6分钟部署及使用喂饭级流程

【最全】2026年OpenClaw(Clawdbot)本地6分钟部署及使用喂饭级流程。OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力,成为…...

【有参考文献】事件触发模型 可实现倒立摆控制仿真实验 simulink模型可直接运行

【有参考文献】事件触发模型 可实现倒立摆控制仿真实验 simulink模型可直接运行 含详细参考文献倒立摆这个玩具般的控制对象,总能让工程师们玩得停不下来。它那摇摇欲坠的姿态就像在挑衅:"有本事就来稳住我啊!"传统控制方法像永不停…...

电脑端制作泳道图超便捷 零基础快速做出专业业务流程图

在企业管理、软件开发、流程梳理等工作场景中,泳道图作为一种清晰呈现多角色、多部门协作流程的可视化图表,被广泛应用于需求分析、业务流程优化、系统设计等环节。对于职场从业者和开发者而言,快速绘制出规范、专业的泳道图,能够…...

数据中心U位管理与DCIM、ITAM/CMDB系统的协同机制及实践路径

摘要:在数据中心数字化、集约化运维趋势下,机柜U位作为物理资源的核心计量单元,其精细化管理水平直接影响数据中心资产利用率、运维效率及业务连续性。本文从数据中心运维架构出发,系统剖析U位管理的核心价值,明确其与…...

LLM的可信度边界--人类思考的可信边界

本文为个人想法分享,是一种幻觉创作,只图一乐。作者自愿放弃全部内容的一切权利,不作任何原创确权;内容由 AI 辅助生成,未参考任何特定文章,仅使用公有科学公式 / 概念,非商用,尊重所…...

ssm+java2026年毕设社区外来人员【源码+论文】

本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于社区警务管理问题的研究,现有研究主要以传统纸质档案管理和单一功能的信息化系统为主,专门针对社区…...

MySQL迁移中的兼容性实践难点复盘:从语法一致到行为对齐

MySQL迁移中的兼容性实践难点复盘:从语法一致到行为对齐 在当前信创项目加速落地的背景下,金仓数据库(KingbaseES)因其对MySQL生态的深度适配能力,正被大量金融、政务及央国企单位纳入核心系统替换评估范围。然而&…...

在pyCharm 中命令打包生成exe文件方法

在 PyCharm 中打包 Python 文件,最常用、最可靠的方法是结合使用 PyInstaller 工具。针对你之前编写的生成 UFF 文件的脚本,下面我会介绍两种在 PyCharm 中操作的方式,并重点说明如何确保依赖项(如 numpy, pyuff)和可能…...

gorm底层框架解析

我来为您解析 GORM 底层框架的核心原理和架构设计。这是一个深度技术话题,让我系统性地拆解:GORM 架构全景 ┌─────────────────────────────────────────┐ │ Application Layer │ │…...

leijmdas的godi注入方式先进性

leijmdas 的 godi 框架具体的依赖注入实现方式,给你准确的技术细节。 我来详细介绍 leijmdas 的 godi 框架的依赖注入方式。这是一个基于 代码生成 的工业级 DI 框架,设计非常独特。godi 的核心注入方式1. 结构体标签驱动注入(Tag-Based Inje…...

基于单片机的超声波水塔液位测量系统protues仿真 本设计基于单片机的超声波水塔液位测量和智...

基于单片机的超声波水塔液位测量系统protues仿真 本设计基于单片机的超声波水塔液位测量和智能控制系统主要由硬件与软件两部分组成,硬件是基于AT89C51芯片为核心的超声波水塔液位测量,采用AT89C51单片机进行控制及数据处理,给出了超声波发射…...

DigVPS 测评 - 蔭雲(YINNET)上新法國ISP VPS 产品,新品七折出售中。

规格: 摘要: 硬件: 速率: IPv4 质量: ICMP 延迟: TCP 延迟: BGP: 如对该产品感兴趣,想要持续关注其实时与历史数据表现,欢迎访问我们的站点进行长期跟踪。也可…...

探索 BMS 仿真:电池平衡控制策略与 Simulink 的奇妙结合

BMS仿真电池平衡控制策略仿真similink 动力电池管理系统仿真 BMS Battery Simulink 控制策略模型, 动力电池物理模型,需求说明文档。 BMS算法模型包含状态切换模型、SOC估计模型(提供算法说明文档)、电池平衡模型、功率限制模型等,动力电池…...

update-desktop-database命令用法与技巧总结

update-desktop-database 是一个用于构建桌面文件 MIME 类型缓存数据库的命令行工具。它主要扫描指定目录下的 .desktop 文件,提取它们所能处理的 MIME 类型,并创建一个缓存文件(mimeinfo.cache)。这个缓存极大地提升了系统或应用…...

“下一代地热”能的进展和挑战

地热能是一种清洁、持续的能源,在许多地区均可获取,但其发展一直较为缓慢。近2000年前,罗马人就已广泛利用地热能——即来自地球内部的热量——包括在现今英国巴斯地区的温泉综合体中。电力首次从地热源产生是在20世纪初的意大利。在美国&…...

谷歌地图引入Gemini,Ask Maps开启导航新体验

谷歌地图引入Gemini,Ask Maps功能亮相谷歌地图作为谷歌公司的核心产品,紧跟潮流引入了Gemini技术。此次更新带来了全新的导航体验,推出了名为“Ask Maps”的AI功能。这是一个由Gemini驱动的对话系统,能规划行程,还可针…...

阿里龙虾组合来了:HiClaw + CoPaw,内存占用大幅降低

当我们在谈论 “轻量级 Worker” 时,我们在谈论什么? 如果你用过 HiClaw,可能已经熟悉了 Manager Worker 的多 Agent 协作模式。一个 Manager 作为"AI 管家",管理着多个专业化的 Worker —— 前端开发、后端开发、数据…...

实战案例五:Claude Code + Word 技能自动化报告生成

在企业日常工作中,报告撰写是一项频繁且耗时的任务。周报、月报、项目报告、合同文档……这些文档往往有固定的模板,只是数据不同。本案例将展示如何利用 Claude Code 的 Word 技能,实现报告的自动化生成,大幅提升工作效率。 场景描述 你是某公司的项目经理,每周需要向管…...