3.8 Spring Cloud Alibaba Seata 分布式事务| 学习笔记

简介: 快速学习 3.8 Spring Cloud Alibaba Seata 分布式事务。

开发者学堂课程【Spring Cloud 微服务架构设计与开发实战 3.8 Spring Cloud Alibaba Seata 分布式事务】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/60/detail/1101


3.8 Spring Cloud Alibaba Seata 分布式事务

 

内容介绍

一、Seata 微服务分布式事务框架

二、Seata 微服务分布式架构图

三、Seata 微服务分布式事务框架实战

 

这节课讲如何结合 Spring Cloud 去使用阿里巴巴微服务分布式事务框架 Seata,Seata 是阿里云开发的重要解决方案,下面介绍相关特定。

 

一、Seata 微服务分布式事务框架

Seata 可以认为是尝试去支持不同微服务框架的事务性机制,而微服务本身是很难去支持分布式事务,这是一个很大的弱点,在于其协议,目前 Spring Cloud 默认使用协议是 http,这个协议本身并不支持事务特性,所谓企业级开发有很多重要的要求,但 Spring Cloud 是不支持的,而作为某些公司就会用到基于微服务的一些事务机制,这里提醒微服务架构中的事务绝大部分的都没有实现真正意义上事务的ACID 特性。

1、Spring Cloud Seata

Seata 早期名为 Fescar,是阿里巴巴开源的分布式事务框架,后面与项目Fast&EaSy 合并,变成更好用简单的分布式事务框架,不仅支持 Dubbo,Spring Cloud 等,包括其他的微服务分布式事务也是支持的。

2、阿里 Seata 发展路线图

如下面图 Seata 也在不断的迭代,这里注意在微服务架构中可以去不断的切换不同的主页,不断的升级改造。后面会提到具体这样使用,因为微服务架构中大部分做的都是消息补偿,比如做个消息中心店,发消息更新对面的服务,或者用定时针的这些机制用的更多,而因为性能问题使用分布式的更少。

image.png

 

二、Seata 微服务分布式架构图

1、电商交易场景(无事务分布式架构图)

image.png

一般模拟的场景为用户要购买,购买的话要生成订单,快递服务,抢购的时候还要库存问题,比如一个物品要买10件而库存只有5件,这里就要做判断,看是不是成功,这中间就要涉及到不同数据一次性判断问题,还要做数据的头部,包括同步积分,同步优惠券等一系列问题,这里面就会有微服务分布事务的问题出现,当然这个是在微服务架构中很难实现的,主要是靠 RPC 框架,RPC 主要在自己业务上用得更多,后面变成开源了,也是在微服务架构中比较重要的解决方案。

2、Seata 分布式事务架构图

image.png

当然这些只是了解不强迫使用,了解只是为了以后的架构设计多个选择,能更合理的技术选型而不是直接的做某个框架,架构设计要综合考虑,包括成本,需求等问题。

 

三、Seata 微服务分布式事务框架实战

1、Seata 分布式事务改造

实战的话框架的实现机制大部分都是补偿机制,虽然模拟了一个分布式事务协议,但不是真正意义上的,没有强制性去使用库,没有做分布式锁的概念,实际上是尝试插入数据,然后再删除,可以发现是通过逻辑上的特性代码来模拟一个真正的分布式事务。

简单的注解

@GlobalTransactional

直接标注在事务方法上即可

@GlobalTransactional

public void purchase(String userld, String

commodityCode, int orderCount) {

}

这里需要注意 GlobalTransactional 叫全局事务,设计模式上很像一些协议,包括JTA 事务这种框架,爬取几个库和做了一些什么操作都会有一个根事务,还有像事务管理器,资源管理器这些角色参与进来。这种叫强事务,严重会影响到系统的性能,因为有大量的协调事件加上长级事务锁、数据库的锁、资源的锁,所以会影响整个系统的优良性,而系统在事务这方面选择的走实物系统。

<dependency>

<groupld> io.seata </groupld>

<artifactld> seata-all </artifactld>

<version> ${seata.version} </version>

</dependency>

2Seata 实战依赖

这个代码要加上 Seata 的依赖,也可以直接用但要考虑到兼容,因为阿里巴巴版本和 Spring Cloud 版本没有及时的跟进,可能会有1-2个版本的差异,那么包括现在演示的2.1,2.1,2.3提前做测试还可以用。这做依赖的时候可以用快速开发,里面也统一提供了一个甲方依赖包,配置到文件中就可以直接拉进依赖包。可以看下下面的代码,主要是做一个扩展,Seata 知识的几种模式实际都是在逻辑上通过模拟事务的场景,使用当中要慎重,因为实际上事务会有更多的消息通信,更多的协调工作,而且这里面肯定会影响到系统的性能。

<dependency>

<groupId>com. Alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-seata</artifactId>

<version>2.2.1. RELEASE</version>

</dependency>

3、代码讲解

下面重点讲解下代码,Seata 这种分布事务需要注意一个问题,比如是在某一个微服务里面调用了其他接口的场景,服务是下单类的服务操作,接下来就是购买,购买就要生成一个订单,然后要调用支付的服务,库存的服务,这里模拟的一个交易的服务场景,代码如下:

SeateBusinessServicelmpl.java 中代码为

package com. alibaba.services;

import io. seata. spring. annotation.GlobalTransactional;

public class SeataBusinessServiceImpl implements SeataBusinessServices

private StorageService storageService;

private OrderService orderService;

private PayService payService;

/**

*购买,启动全局事务

*/

@GlobalTransactional

public void buy(String userId, String commodityCode, int orderCount)

// 1.订单微服务

orderService . create(userId, commodityCode, orderCount);

// 2.库存微服务

storageService . deduct( commodityCode, orderCount);

// 3.支付微服务

payService . deduct(userId, orderCount);

//4.其他微服务调用,快递服务,积分、优惠券等

}

如有订单的服务,实现接口,账号的实现,支付,仓库的实现,而在案例的代码中下单操作实际上接入了仓库 StorageService 的实现,订单 OrderService 的实现和支付 PayService 的实现,而如果要启动分布式事务的话就一定要有全局注解 @GlobalTransactional,下面在下订单的时候就要依次调用订单微服务,减库存,完成支付操作,当然也可以完成其他的,比如推送一个快递,积分,优惠券等,其他的微服务都可以一次性调用,但一般没有要求是不会这样做的,而会做逻辑性操作 try.catch,尝试去调用这个服务,只是说有这样一种框架多一个选择比没有好,而且知道他的机制模式和实现方法。

相关文章
|
2月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
1月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
131 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
SQL NoSQL 数据库
SpringCloud基础6——分布式事务,Seata
分布式事务、ACID原则、CAP定理、Seata、Seata的四种分布式方案:XA、AT、TCC、SAGA模式
SpringCloud基础6——分布式事务,Seata
|
2月前
|
消息中间件 Java 对象存储
数据一致性挑战:Spring Cloud与Netflix OSS下的分布式事务管理
数据一致性挑战:Spring Cloud与Netflix OSS下的分布式事务管理
53 2
|
2月前
|
人工智能 前端开发 Java
Spring Cloud Alibaba AI,阿里AI这不得玩一下
🏀闪亮主角: 大家好,我是JavaDog程序狗。今天分享Spring Cloud Alibaba AI,基于Spring AI并提供阿里云通义大模型的Java AI应用。本狗用SpringBoot+uniapp+uview2对接Spring Cloud Alibaba AI,带你打造聊天小AI。 📘故事背景: 🎁获取源码: 关注公众号“JavaDog程序狗”,发送“alibaba-ai”即可获取源码。 🎯主要目标:
95 0
|
3月前
|
人工智能 前端开发 Java
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
本文介绍了如何使用 **Spring Cloud Alibaba AI** 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。主要内容包括:Spring Cloud Alibaba AI 的概念与功能,使用前的准备工作(如 JDK 17+、Spring Boot 3.0+ 及通义 API-KEY),详细实操步骤(涵盖前后端开发工具、组件选择、功能分析及关键代码示例)。最终展示了如何成功实现具备基本聊天功能的 AI 应用,帮助读者快速搭建智能聊天系统并探索更多高级功能。
1361 2
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
|
6月前
|
Nacos 数据库
分布式事务解决方案Seata
分布式事务解决方案Seata
99 1
|
6月前
|
存储 关系型数据库 MySQL
基于Seata实现分布式事务
通过以上步骤,你可以使用 Seata 实现分布式事务,确保在微服务架构中的事务一致性。Seata 支持多种语言和框架,能够满足不同业务场景的需求。欢迎关注威哥爱编程,一起学习成长。
162 1
|
3月前
|
关系型数据库 MySQL 数据库
SpringCloud2023中使用Seata解决分布式事务
对于分布式系统而言,需要保证分布式系统中的数据一致性,保证数据在子系统中始终保持一致,避免业务出现问题。分布式系统中对数据的操作要么一起成功,要么一起失败,必须是一个整体性的事务。Seata简化了这个使用过程。
89 2
下一篇
无影云桌面