返回

SpringCloudAlibaba之Integrated Example示例工程源码解读二

后端

1. 分布式事务概述

分布式事务是指一组分布在不同节点上的事务,这些事务作为一个整体来执行,要么都成功,要么都失败。分布式事务的实现面临着许多挑战,包括但不限于:

  • 数据一致性 :确保分布式事务中的所有数据操作都按照预期的顺序执行,并且在所有节点上保持一致。
  • 原子性 :确保分布式事务中的所有操作要么都成功,要么都失败,不会出现部分成功的情况。
  • 隔离性 :确保分布式事务中的每个操作都独立于其他操作,不会受到其他操作的影响。
  • 持久性 :确保分布式事务中的所有数据操作都能够持久化存储,即使发生故障也不会丢失。

2. Seata分布式事务框架

Seata是一个开源的分布式事务框架,它采用TCC(Try-Confirm-Cancel)模式来实现分布式事务。TCC模式将一个分布式事务分为三个阶段:

  • Try阶段 :在Try阶段,事务参与者(即分布式事务中的每个参与节点)会执行本地事务,并对相关资源进行预留。
  • Confirm阶段 :如果Try阶段的所有操作都成功,则会进入Confirm阶段。在Confirm阶段,事务参与者会提交本地事务,并释放预留的资源。
  • Cancel阶段 :如果Try阶段或Confirm阶段有任何操作失败,则会进入Cancel阶段。在Cancel阶段,事务参与者会回滚本地事务,并释放预留的资源。

3. SpringCloudAlibaba之Integrated Example示例工程源码解读

SpringCloudAlibaba的Integrated Example示例工程是一个分布式事务的示例项目,它演示了如何在Spring Cloud Alibaba中使用Seata框架来实现分布式事务。该项目包含了两个模块:

  • order-service模块 :这是一个订单服务模块,它负责处理订单的创建、修改和删除操作。
  • storage-service模块 :这是一个库存服务模块,它负责处理商品库存的增加、减少和查询操作。

这两个模块都使用了Seata框架来实现分布式事务,以确保订单和库存数据的一致性。

3.1 工程结构

Integrated Example示例工程的工程结构如下:

├── order-service
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   ├── com
│   │   │   │   │   ├── example
│   │   │   │   │   │   ├── config
│   │   │   │   │   │   │   ├── DataSourceProxyAutoConfiguration.java
│   │   │   │   │   │   │   ├── StorageServiceAutoConfiguration.java
│   │   │   │   │   │   │   ├── TransactionConfiguration.java
│   │   │   │   │   │   │   ├── main
│   │   │   │   │   │   │   │   ├── Application.java
│   │   │   │   │   │   │   │   ├── CloudAlibabaConfiguration.java
│   │   │   │   │   │   │   │   ├── TransactionExceptionAdvice.java
│   │   │   │   │   │   │   │   └── TransactionBeanFactoryPostProcessor.java
│   │   │   │   │   │   │   ├── test
│   │   │   │   │   │   │   │   ├── AbstractTest.java
│   │   │   │   │   │   │   │   ├── OrderServiceTest.java
│   │   │   │   │   │   │   │   └── SeataAutoConfigurationTest.java
│   │   │   │   │   │   │   ├── util
│   │   │   │   │   │   │   │   └── TransactionUtils.java
│   │   │   │   │   │   │   └── vo
│   │   │   │   │   │   │   │   ├── Order.java
│   │   │   │   │   │   │   │   ├── OrderDTO.java
│   │   │   │   │   │   │   │   └── OrderVO.java
│   │   │   │   │   │   │   └── web
│   │   │   │   │   │   │   │   ├── OrderController.java
│   │   │   │   │   │   │   │   └── OrderFeignClient.java
│   │   │   │   │   │   │   ├── model
│   │   │   │   │   │   │   │   ├── Product.java
│   │   │   │   │   │   │   │   ├── Storage.java
│   │   │   │   │   │   │   │   └── TransactionLog.java
│   │   │   │   │   │   │   └── repository
│   │   │   │   │   │   │   │   ├── OrderRepository.java
│   │   │   │   │   │   │   │   ├── ProductRepository.java
│   │   │   │   │   │   │   │   ├── StorageRepository.java
│   │   │   │   │   │   │   │   └── TransactionLogRepository.java
│   │   │   │   │   │   │   └── service
│   │   │   │   │   │   │   │   ├── OrderService.java
│   │   │   │   │   │   │   │   ├── ProductService.java
│   │   │   │   │   │   │   │   ├── StorageService.java
│   │   │   │   │   │   │   │   └── TransactionLogService.java
│   │   │   │   │   │   │   └── util
│   │   │   │   │   │   │   │   ├── FeignConfiguration.java
│   │   │   │   │   │   │   │   └── WebConfiguration.java
│   │   │   │   │   │   │   └── vo
│   │   │   │   │   │   │   │   ├── PageRequest.java
│   │   │   │   │   │   │   │   ├── PageResult.java
│   │   │   │   │   │   │   │   ├── OrderRequest.java
│   │   │   │   │   │   │   │   ├── OrderResponse.java
│   │   │   │   │   │   │   │   ├── PageOrderRequest.java
│   │   │   │   │   │   │   │   ├── PageOrderResponse.java
│   │   │   │   │   │   │   │   ├── ReduceStockRequest.java
│   │   │   │   │   │   │   │   └── StorageResponse.java
│   │   │   │   │   │   │   └── web
│   │   │   │   │   │   │   │   ├── AbstractController.java
│   │   │   │   │   │   │   │   ├── ExceptionController.java
│   │   │   │   │   │   │   │   ├── GlobalExceptionHandler.java
│   │   │   │   │   │   │   │   ├── OrderController.java
│   │   │   │   │   │   │   │   ├── ProductController.java
│   │   │   │   │   │   │   │   ├── StorageController.java
│   │   │   │   │   │   │   │   ├── TransactionLogController.java
│   │   │   │   │   │   │   │   └── TransactionLogFeignClient.java
├── storage-service
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   ├── com
│   │   │   │   │   ├── example
│   │   │   │   │   │   ├── config
│   │   │   │   │   │   │   ├── DataSourceProxyAutoConfiguration.java
│   │   │   │   │   │   │   ├── Storage