# springCloudStudy **Repository Path**: kedlikz/springCloudStudy ## Basic Information - **Project Name**: springCloudStudy - **Description**: 根据lfy的SpringCloud教学视频抄过来的 product模块下多了个RabbitMQ - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-12 - **Last Updated**: 2025-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 微服务学习项目,基于Spring Cloud Alibaba框架,包含订单、商品、库存、账户等基础模块,以及网关、限流、分布式事务等功能。 ## 功能模块 - **订单服务(seata-order/service-order)**:实现订单创建、库存扣减、账户扣款等业务逻辑,支持Feign远程调用、负载均衡、Sentinel限流降级等特性。 - **商品服务(service-product)**:提供商品信息查询接口,集成RabbitMQ消息队列,实现订单消息的异步处理。 - **库存服务(seata-storage)**:管理商品库存,提供库存扣减接口。 - **账户服务(seata-account)**:管理用户账户余额,提供账户扣款接口。 - **网关(gateway)**:实现API路由、鉴权、限流等功能,包含自定义过滤器和路由谓词。 - **公共模块(model)**:封装通用类,如响应结果R、订单Order、商品Product等。 ## 技术栈 - Spring Boot 2.x - Spring Cloud Alibaba 2022.x - Nacos 作为服务注册中心和配置中心 - Feign 实现服务间通信 - LoadBalancer 实现客户端负载均衡 - Sentinel 实现限流降级 - Seata 实现分布式事务 - RabbitMQ 实现异步消息处理 - MyBatis Plus 实现数据库操作 - Lombok 简化Java代码 ## 项目结构 ``` springCloudStudy/ ├── gateway/ # API网关模块 ├── model/ # 通用类模块 ├── services/ # 服务模块 │ ├── seata-account/ # 账户服务 │ ├── seata-business/ # 业务服务(调用其他服务) │ ├── seata-order/ # 订单服务(Seata示例) │ ├── seata-storage/ # 库存服务(Seata示例) │ ├── service-order/ # 订单服务(普通示例) │ └── service-product/ # 商品服务 └── pom.xml # Maven项目配置文件 ``` ## 快速开始 1. 安装并启动Nacos Server 2. 安装并启动Seata Server(如需使用分布式事务) 3. 安装并启动RabbitMQ(如需使用消息队列) 4. 修改各服务的application.yml文件,配置数据库连接信息、Nacos地址、Seata地址等 5. 启动各服务模块的MainApplication类 6. 访问API接口进行测试 ## 使用说明 ### 订单服务(seata-order/service-order) #### 创建订单 GET /create?userId={userId}&commodityCode={commodityCode}&count={orderCount} 参数说明: - userId:用户ID - commodityCode:商品编码 - orderCount:购买数量 返回示例: { "code": 200, "msg": "OK", "data": { "id": 1, "userId": 1, "commodityCode": "product001", "count": 2, "money": 100 } } #### 查询订单 GET /{id} 参数说明: - id:订单ID 返回示例: { "code": 200, "msg": "OK", "data": { "id": 1, "userId": 1, "commodityCode": "product001", "count": 2, "money": 100 } } ### 商品服务(service-product) #### 查询商品 GET /product/{id} 参数说明: - id:商品ID 返回示例: { "code": 200, "msg": "OK", "data": { "id": 1, "productName": "商品001", "price": 50, "num": 100 } } #### 创建订单 POST /order 请求体示例: { "userId": 1, "productId": 1, "count": 2 } 返回示例: { "code": 200, "msg": "OK", "data": { "id": 1, "userId": 1, "productId": 1, "count": 2, "totalAmount": 100 } } ### 账户服务(seata-account) #### 扣款 GET /debit?userId={userId}&money={money} 参数说明: - userId:用户ID - money:扣款金额 返回示例: { "code": 200, "msg": "OK", "data": null } ### 库存服务(seata-storage) #### 扣减库存 GET /deduct?commodityCode={commodityCode}&count={count} 参数说明: - commodityCode:商品编码 - count:扣减数量 返回示例: { "code": 200, "msg": "OK", "data": null } ### 网关(gateway) #### 路由配置 在application-route.yml中配置路由规则,例如: ```yaml spring: cloud: gateway: routes: - id: service-order uri: lb://service-order predicates: - Path=/order/** filters: - StripPrefix=1 - id: service-product uri: lb://service-product predicates: - Path=/product/** filters: - StripPrefix=1 - id: seata-account uri: lb://seata-account predicates: - Path=/account/** filters: - StripPrefix=1 - id: seata-storage uri: lb://seata-storage predicates: - Path=/storage/** filters: - StripPrefix=1 ``` #### 自定义过滤器 OnceTokenGatewayFilterFactory:添加一次性令牌验证功能 RtGlobalFilter:记录请求处理时间 VipRoutePredicateFactory:实现VIP用户路由规则 ## 常见问题 Q: 启动服务时报错“找不到或无法加载主类”? A: 确保已正确配置Maven项目,执行mvn clean install命令安装依赖。 Q: 调用接口时报错“无法解析服务”? A: 确保Nacos Server已启动,且服务已成功注册到Nacos。 Q: 分布式事务未生效? A: 确保Seata Server已启动,且各服务已正确配置Seata相关参数。 Q: 消息队列未生效? A: 确保RabbitMQ已启动,且各服务已正确配置RabbitMQ相关参数。