【Spring Cloud Alibaba Seata 处理分布式事务】——每天一点小知识

news2024/12/23 19:56:28

在这里插入图片描述

                                                                              💧 S p r i n g C l o u d A l i b a b a S e a t a 处理分布式事务 \color{#FF1493}{Spring Cloud Alibaba Seata 处理分布式事务} SpringCloudAlibabaSeata处理分布式事务💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥


文章目录

  • 🐳Spring Cloud Alibaba Seata 处理分布式事务
    • 分布式事务问题
    • Seata 简介
    • Seata-Server 安装
    • 实战小案例
    • TC/TM/RM 三个组件
    • AT 模式如何做到对业务的无侵入
    • 总结
  • 🐳结语


🐳Spring Cloud Alibaba Seata 处理分布式事务

分布式事务是在微服务架构中常见的挑战之一。随着微服务的快速发展,保持数据一致性变得越来越重要。Spring Cloud Alibaba Seata 是一个开源的分布式事务解决方案,它提供了一套完整的工具和框架,用于管理和协调分布式事务。

分布式事务问题

在微服务架构中,每个服务通常都有自己的数据库。当一个业务操作涉及到多个服务时,就需要保证这些操作要么全部成功,要么全部失败,以保持数据的一致性。然而,传统的本地事务机制无法直接应用于分布式环境,因为分布式事务面临网络延迟、节点故障和并发访问等挑战。


Seata 简介

Seata 是由阿里巴巴开源的分布式事务解决方案。它提供了一个简单而强大的机制来管理和协调分布式事务。Seata 主要由三个核心组件组成:

  • TC (Transaction Coordinator): TC 是事务协调器,负责协调并管理分布式事务的提交和回滚。
  • TM (Transaction Manager): TM 是事务管理器,负责事务的开始、提交和回滚操作。
  • RM (Resource Manager): RM 是资源管理器,负责管理和协调参与分布式事务的各个资源。

在这里插入图片描述

Seata-Server 安装

首先,我们需要安装 Seata-Server,它是 Seata 的服务端组件。您可以按照以下步骤进行安装:

  1. 下载 Seata-Server 压缩包并解压。
  2. 进入解压后的目录,修改 conf/registry.conf 文件中的注册中心配置,例如使用 Nacos 作为注册中心。
  3. 修改 conf/file.conf 文件中的事务日志存储配置。
  4. 运行 bin/seata-server.sh(Linux/macOS)或 bin/seata-server.bat(Windows)启动 Seata-Server。

实战小案例

让我们通过一个简单的示例来演示如何在 Spring Cloud Alibaba 中使用 Seata 处理分布式事务。

假设我们有两个微服务:Order-ServiceInventory-Service。订单服务负责创建订单,库存服务负责扣减库存。当一个订单创建成功时,我们需要确保库存被正确扣减,否则需要回滚订单操作。

以下是一个简化的示例:

// Order-Service

@Service
public class OrderService {

    @Autowired
    private OrderRepository orderRepository;

    @Autowired
    private InventoryServiceClient inventoryServiceClient;

    @GlobalTransactional
    public void createOrder(Order order) {
        // 创建订单
        orderRepository.create(order);

        // 调用库存服务扣减库存
        inventoryServiceClient.decreaseStock(order.getProductId(), order.getQuantity());
    }
}

// Inventory-Service

@Service
public class InventoryService {

    @Autowired
    private InventoryRepository inventoryRepository;

    @Transactional
    public void decreaseStock(Long productId, int quantity) {
        // 扣减库存
        inventoryRepository.decreaseStock(productId, quantity);
    }
}

在上述示例中,我们使用了 @GlobalTransactional 注解标记了 createOrder 方法,表示该方法是一个分布式事务的入口。当 createOrder 方法执行时,Seata 将自动创建一个分布式事务,并协调两个服务的事务操作。

TC/TM/RM 三个组件

Seata 的 TC、TM 和 RM 组件在示例中起着关键作用。以下是这些组件的详细解释:

  • TC (Transaction Coordinator): TC 组件负责协调并管理分布式事务的提交和回滚。它接收来自 TM 的事务操作请求,并与 RM 协同工作来保持事务的一致性。

  • TM (Transaction Manager): TM 组件负责事务的开始、提交和回滚操作。在示例中,@GlobalTransactional 注解标记的方法会由 TM 来处理。

  • RM (Resource Manager): RM 组件负责管理和协调参与分布式事务的各个资源。在示例中,Order-Service 和 Inventory-Service 分别充当了 RM 的角色。

AT 模式如何做到对业务的无侵入

Seata 采用了 AT (Auto-Transfer) 模式来实现对业务的无侵入。AT 模式是一种基于数据库的分布式事务解决方案。Seata 通过在分布式事务中记录和回放 SQL 日志的方式,来确保分布式事务的原子性和一致性。

在示例中,@GlobalTransactional 注解将自动开启一个分布式事务,并在需要的时候将相关的数据库操作纳入到事务管理中。这种方式对业务代码是无侵入的,您可以像普通的本地事务一样编写代码,而无需关心分布式事务的处理细节。

总结

Spring Cloud Alibaba Seata 是一个功能强大的分布式事务解决方案,它提供了对分布式事务的管理和协调支持。通过使用 Seata,我们可以轻松处理微服务架构中的分布式事务问题,保证数据的一致性。


在这里插入图片描述


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOs8开启网卡配置

1.查看网卡文件 ls /etc/sysconfig/network-scripts/ 网卡文件名为 ifcfg-ens160 2.编辑网卡配置 vi /etc/sysconfig/network-scripts/ifcfn-ens160 按Esc结束编辑,然后冒号 : 输入 wq保存并退出 3.启用网卡 nmcli c up ens160 ##centos8网络管理命令 nmcl…

多元回归预测 | Matlab灰狼算法(GWO)优化极限学习机ELM回归预测,GWO-ELM回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab灰狼算法(GWO)优化极限学习机ELM回归预测,GWO-ELM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环…

AI智慧安监EasyCVR平台长时间运行出现协程高的现象是什么原因?

EasyCVR视频融合平台基于云边端协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海…

idea2019.3启动不起来_卡在启动界面

.其实是因为Windows的语音设置导致的. 这里可以,找到控制面板,然后找到,右上角查看方式,选择,类别 2.然后找到时钟和区域 点击时钟和区域 然后 点击区域 然后在区域界面 点击区域选项卡,然后找到 管理,点击管理,然后点击更改系统区域设置 然后看下面的图,这里不要勾选Beta版…

工程安全监测无线振弦采集仪在建筑物的应用分析

工程安全监测无线振弦采集仪在建筑物的应用 工程安全监测无线振弦采集仪是一种在建筑物中应用的重要设备。它通过无线采集建筑物内部的振动信息,对建筑物的安全性进行监测和评估,为建筑物的施工和使用提供了可靠的技术支持。本文将详细介绍工程安全监测…

ModaHub魔搭社区:向量数据库Milvus部署运维问题教程(一)

目录 部署运维问题 如果在安装 Milvus 时,从 Docker Hub 拉取镜像总是失败怎么办? Milvus 只能使用 Docker 部署吗? 为什么 Milvus 返回 config check error 的错误? 为什么在导入数据时 Milvus 显示 no space left on devic…

【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识

💧 S p r i n g C l o u d A l i b a b a S e n t i n e l 实现熔断与限流 \color{#FF1493}{Spring Cloud Alibaba Sentinel 实现熔断与限流} SpringCloudAlibabaSentinel实现熔断与限流💧 🌷 仰望天空,妳我亦是行人.✨…

黑马微信小程序-实现本地服务九宫格并展示商品列表

一、九宫格实现 1.获取数据 1.1准备接口 黑马接口:https://applet-base-api-t.itheima.net/categories 说明:这是获取九宫格的数据接口 1.2使用接口 说明:声明变量获取数据。 getGridList() {wx.request({url: https://applet-base-api-t.…

用雪花 id 和 uuid 还是自增id做 MySQL 主键

MySQL中设计表的时候,MySQL官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处? MySQ…

如何应用Nginx Rewrit

目录 一、Nginx Rewrite 二、Rewrite功能 Rewrite跳转场景 Rewrite跳转实现 Nginx 跳转 pcre支持 重写模块 Rewrite实际场景 Rewrite命令/语法格式 flag标记说明 location分类 location优先级 rewrite和location相比 三、跳转案例 实现域名跳转 第一步 修改指…

Gof23设计模式之原型模式

1.概述 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。 2.结构 原型模式包含一下角色: 抽象原型类:规定了具体原型对象必须实现的clone()方法具体原型类:实现了抽象圆形类的clone()方法…

Opencv 源码编译以及调用相关

查看Ubuntu上面已经安装的opencv的版本 pkg-config --modversion opencv源码编译 源码下载, 注意其中的batch, 选择一致。 git clone https://github.com/opencv/opencv.git # 下面的仓库为第三方库,可以根据需要选择 git clone https://github.com/o…

npm install --save-dev electron报错

报错: 清除一下缓存,并删除掉node_module npm cache clean --force切换cnpm安装 npm install -g cnpm --registryhttps://registry.npm.taobao.org安装electron cnpm i electron --save-d安装成功!

PHP 音乐网站系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 音乐网站系统 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为PHP APACHE,数据库为 mysql5.0,使用php语言开发。 源码…

为按钮和表单绑定事件常用的两种方式

文章目录 前言一、常用事件二、常用事件绑定方式一三、常用事件绑定方式二四、onsubmit()表单事件特别绑定方式4.1 事件绑定方式一使得onsubmit()真正起效 五、常见事件绑定小Bug绑定事件一不规范引发的Bug绑定事件二不规范引发的Bug 前言 在编写代码时,我们难免需要…

VUE使用v-html解析失败和解决方案

有些时候我们拿到后端返回内容进行v-html解析的时候,会发现解析之后,页面展示的还是html内容,我分析了我遇到的情况,希望能帮到大家。 原因:是因为后端返回数据的时候没有对内容进行html做转义,导致页面输出…

爬虫入门指南:学习爬虫的基础知识和技巧

文章目录 爬虫基础知识什么是爬虫?爬虫的工作原理爬虫的应用领域 爬虫准备工作安装Python安装必要的库和工具 网页解析与XPath网页结构与标签CSS选择器与XPathXpath 语法XPath的基本表达式:XPath的谓语(Predicate):XPa…

数据挖掘与数据分析之统计知识篇

1、自由度是什么?怎么确定? 统计学上,自由度是指当以样本的统计量估计总体的参数时,样本中独立或能自由变化的数据个数叫自由度。一般来说,自由度等于独立变量减掉其衍生量数。举例来说,变异数的定义是样本…

Revit U型墩柱的绘制方法和生成柱方法

一、Revit U型墩柱的绘制方法 这里教大家一个墩柱的绘制步骤,我们采用一级等级考试第八期中的U型墩柱试题来给大家演示绘制步骤。 首先我们要明白这里需要采用族样板来绘制,新建一个族样板打开我们的公制常规模型样板 进入立面绘制题目中所需要的参照先&…

java基础(并发编程)-设计模式~同步模式之保护性暂停

一、同步模式之保护性暂停定义 保护性暂停即Guarded Suspension,用在一个线程等待另一个线程的执行结果。 要点 有一个结果需要从一个线程传递到另一个线程,让他们关联到同一个Guarded Object。如果有结果不断从一个线程到另一个线程,那么…