# spring-cloud-alibaba-demo **Repository Path**: my-source-project/spring-cloud-alibaba-demo ## Basic Information - **Project Name**: spring-cloud-alibaba-demo - **Description**: 完整的 Seata 分布式事务(AT、TCC、XA、Saga)和 Sentinel 限流降级演示项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-10-24 - **Last Updated**: 2025-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Cloud Alibaba 分布式事务演示项目 > 完整的 Seata 分布式事务(AT、TCC、XA、Saga)和 Sentinel 限流降级演示项目 ## 📋 项目简介 本项目是一个完整的 Spring Cloud Alibaba 微服务演示项目,重点演示: - ✅ **Seata 分布式事务**:AT、TCC、XA、Saga 四种模式 - ✅ **Sentinel 限流降级**:QPS、热点参数、慢调用熔断 - ✅ **完整测试场景**:成功场景和失败回滚场景 - ✅ **一键启动**:脚本自动化,开箱即用 ### 项目架构 ``` Order Service (8001) ↓ Feign ├─→ Storage Service (8002) - 库存服务 └─→ Account Service (8003) - 账户服务 ``` ### 技术栈 | 组件 | 版本 | | -------------------- | ---------- | | Spring Boot | Ø2.7.14 | | Spring Cloud Alibaba | 2021.0.5.0 | | Seata | 1.7.0 | | Nacos | 2.2.0 | | Sentinel | 1.8.6 | | MyBatis Plus | 3.5.3 | | MySQL | 8.0 | ## 🚀 快速开始 ### 前置条件 确保已安装: - ✅ JDK 1.8+(脚本会自动安装) - ✅ Maven 3.6+(脚本会自动安装) - ✅ Docker 和 Docker Compose(脚本会自动安装) **注意**:脚本会自动检测并安装缺失的依赖,无需手动安装。 ### 一键启动(推荐)⭐ ```bash # 进入项目根目录(克隆或下载项目后) cd spring-cloud-alibaba-demo # 执行一键启动脚本 ./一键启动.sh ``` 脚本会自动完成: 1. ✅ 检查前置条件(JDK、Maven、Docker、Docker Compose) 2. ✅ 检查 Docker 是否运行 3. ✅ 启动基础设施(Nacos、Seata、MySQL、Redis) 4. ✅ 初始化数据库 5. ✅ 启动微服务(Order、Storage、Account) 6. ✅ 运行测试(可选) **脚本特点**: - 🔍 智能检查:自动检测环境,缺失依赖时自动安装 - 🎨 彩色输出:清晰展示每个步骤的执行状态 - ⚡ 自动安装:使用 brew 自动安装缺失的依赖(JDK、Maven、Docker) - ⏱️ 动态检测:智能检测服务就绪状态,无需固定等待时间 - 🚀 并行检测:同时检测多个服务,大幅提升启动速度 - 🔄 智能检测:检测已运行的服务,避免重复启动 - ⚙️ 可选测试:用户可自主选择是否运行测试 ### 手动启动(分步骤) 如果想手动执行每个步骤,可以按照以下流程: #### 步骤 1:安装 Docker(如果没有) ```bash # 使用 Homebrew 安装 brew install --cask docker # 或者从官网下载安装 # 访问:https://www.docker.com/products/docker-desktop # 下载 Docker Desktop for Mac ``` #### 步骤 2:启动基础设施 ```bash # 进入项目根目录(克隆或下载项目后) cd spring-cloud-alibaba-demo # 启动 Nacos、Seata、MySQL、Redis ./scripts/start.sh # 等待约 30-60 秒,所有服务启动完成 ``` **验证服务启动**: ```bash # 检查容器状态 docker-compose ps # 验证 Nacos curl http://localhost:8848/nacos/v1/console/health/readiness # 验证 MySQL docker exec springcloud-mysql mysql -uroot -proot123456 -e "SELECT 1;" # 验证 Redis docker exec springcloud-redis redis-cli ping ``` #### 步骤 3:初始化数据库 ```bash # 进入项目目录 cd projects/spring-cloud-demo # 初始化数据库(创建数据库、表、初始数据) ./resources/scripts/01-初始化数据库.sh ``` **验证数据库初始化**: ```bash # 查看订单数据库 docker exec springcloud-mysql mysql -uroot -proot123456 seata_order \ -e "SELECT COUNT(*) as order_count FROM tb_order;" # 查看库存数据 docker exec springcloud-mysql mysql -uroot -proot123456 seata_storage \ -e "SELECT product_id, product_name, residue FROM tb_storage;" # 查看账户数据 docker exec springcloud-mysql mysql -uroot -proot123456 seata_account \ -e "SELECT user_id, user_name, residue FROM tb_account;" ``` #### 步骤 4:启动微服务 ```bash # 启动所有微服务(Order、Storage、Account) ./resources/scripts/02-启动所有服务.sh # 等待约 60 秒,所有服务启动完成 ``` **验证服务启动**: ```bash # 检查服务健康状态 curl http://localhost:8001/order/health curl http://localhost:8002/storage/health curl http://localhost:8003/account/health ``` #### 步骤 5:运行测试 ##### 5.1 Seata 功能测试(正常场景) ```bash ./resources/scripts/04-Seata功能测试.sh ``` **测试内容**: - AT 模式:自动管理分布式事务 - TCC 模式:手动管理,资源冻结 - XA 模式:强一致性事务 - Saga 模式:状态机编排 ##### 5.2 Seata 回滚测试(失败场景)⭐⭐⭐ ```bash ./resources/scripts/05-Seata回滚测试.sh ``` **测试内容**: - 库存不足场景:验证自动回滚 - SQL 成功后回滚:验证 undo_log 机制 - 数据一致性验证 ##### 5.3 Sentinel 限流测试 ```bash ./resources/scripts/06-Sentinel限流测试.sh ``` **测试内容**: - QPS 限流:超过阈值拒绝请求 - 热点参数限流:针对特定参数值限流 - 慢调用熔断:响应时间过长触发熔断 ##### 5.4 Postman 接口测试(推荐)⭐ 项目提供了完整的 Postman 测试集合,包含所有测试场景: ```bash # 导入 Postman Collection # 文件位置:projects/spring-cloud-demo/resources/Spring_Cloud_Alibaba_Demo.postman_collection.json ``` **使用方法**: 1. 打开 Postman 2. 点击 `Import` → 选择 `Spring_Cloud_Alibaba_Demo.postman_collection.json` 3. 导入成功后,在 Collection 中可以看到所有测试接口 4. 点击 `Run` 运行所有测试,或单独运行某个接口 **测试集合包含**: - ✅ 健康检查(Order、Storage、Account) - ✅ Seata AT 模式测试 - ✅ Seata TCC 模式测试 - ✅ Seata XA 模式测试 - ✅ Seata Saga 模式测试 - ✅ Seata 回滚测试(库存不足) - ✅ Seata 回滚测试(SQL 成功后回滚) - ✅ Sentinel 限流测试(QPS、热点参数、线程数) - ✅ Sentinel 熔断测试(慢调用) ## 🌐 访问控制台 | 服务 | 地址 | 用户名 | 密码 | | ------------------ | --------------------------- | -------- | -------- | | **Nacos** | http://localhost:8848/nacos | nacos | nacos | | **Sentinel** | http://localhost:8858 | sentinel | sentinel | | **Seata** | http://localhost:7091 | seata | seata | ## 📁 项目结构 ``` spring-cloud-alibaba-demo/ ├── README.md # 本文件 ├── docker-compose.yaml # Docker Compose 配置 │ ├── scripts/ # 🔧 环境脚本 │ ├── start.sh # 启动基础设施 │ ├── stop.sh # 停止基础设施 │ ├── status.sh # 查看状态 │ └── logs.sh # 查看日志 │ ├── config/ # ⚙️ 配置 │ ├── mysql/ # MySQL 配置和数据 │ ├── nacos/ # Nacos 配置和数据 │ ├── redis/ # Redis 配置和数据 │ ├── seata/ # Seata 配置和日志 │ └── sentinel/ # Sentinel 日志 │ └── projects/ # 🚀 演示项目 └── spring-cloud-demo/ # 分布式事务演示项目 ├── README.md # 项目说明 ├── pom.xml # Maven 父项目 │ ├── resources/ # 📦 项目资源 │ ├── docs/ # 📚 文档 │ ├── scripts/ # 🔧 脚本 │ ├── database/ # 🗄️ 数据库脚本 │ └── Spring_Cloud_Alibaba_Demo.postman_collection.json # 📮 Postman 测试集合 │ └── services/ # 🚀 微服务 ├── order-service/ # 订单服务 (8001) ├── storage-service/ # 库存服务 (8002) └── account-service/ # 账户服务 (8003) ``` ## 📚 详细文档 | 文档 | 说明 | | ------------------------------------------------------------------------- | ----------------- | | [快速开始](projects/spring-cloud-demo/resources/docs/01-快速开始.md) | 详细的启动步骤 | | [AT模式详解](projects/spring-cloud-demo/resources/docs/02-AT模式详解.md) | AT 模式原理和实现 | | [回滚测试](projects/spring-cloud-demo/resources/docs/06-回滚测试.md) | 回滚测试指南 | | [TCC模式详解](projects/spring-cloud-demo/resources/docs/03-TCC模式详解.md) | TCC 模式原理 | | [Saga模式详解](projects/spring-cloud-demo/resources/docs/04-Saga模式详解.md) | Saga 模式实现 | ## 🛑 停止环境 ```bash # 停止演示项目 cd projects/spring-cloud-demo ./resources/scripts/03-停止所有服务.sh # 停止基础设施 cd ../.. ./scripts/stop.sh ``` ## 🔧 常用操作 ### 查看日志 ```bash # 查看基础设施日志 ./scripts/logs.sh nacos # 查看微服务日志 tail -f /tmp/order-service.log tail -f /tmp/storage-service.log tail -f /tmp/account-service.log ``` ### 重启服务 ```bash # 重启所有服务 docker-compose restart # 重启单个服务 docker-compose restart nacos ``` ### 数据库操作 ```bash # 连接 MySQL docker exec -it springcloud-mysql mysql -uroot -proot123456 # 查看订单 docker exec springcloud-mysql mysql -uroot -proot123456 seata_order \ -e "SELECT * FROM tb_order ORDER BY id DESC LIMIT 10;" # 查看库存 docker exec springcloud-mysql mysql -uroot -proot123456 seata_storage \ -e "SELECT * FROM tb_storage;" ``` ## ⚠️ 注意事项 1. **首次启动**需要等待 30-60 秒,让所有服务完全启动 2. **MySQL 密码**:root / root123456 3. **Nacos 账号**:nacos / nacos 4. **数据持久化**:数据保存在本地目录,删除目录会导致数据丢失 ## 📊 测试数据 ### 用户账户 - 用户 1:zhangsan,总金额 10000 元 - 用户 2:lisi,总金额 10000 元 ### 商品库存 - 商品 1:iPhone 15 Pro,库存 1000 个 - 商品 2:MacBook Pro,库存 500 个 - 商品 3:AirPods Pro 2,库存 2000 个 --- **项目位置**:`/Users/wanghuan/data/app/my_source/spring-cloud-alibaba-demo` **最后更新**:2025-10-24