# Elm_Cloud **Repository Path**: LCC_Z/Elm_Cloud ## Basic Information - **Project Name**: Elm_Cloud - **Description**: 饿了么 Spring Cloud 微服务项目。基于 Spring Cloud + Vue 3 的前后端分离外卖点餐系统,按 DDD 拆分为用户、商家、购物车、订单、地址五个微服务,集成 Eureka、Config、Gateway、OpenFeign 与 Resilience4j 熔断等治理能力。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-30 - **Last Updated**: 2026-06-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Elm_Cloud > 饿了么 Spring Cloud 微服务项目 基于 **Spring Cloud + Vue 3** 的前后端分离外卖点餐系统。按 DDD 思想拆分为用户、商家、购物车、订单、地址五个业务微服务,并集成 Eureka 注册中心集群、Config 配置中心集群、Gateway 网关、OpenFeign 远程调用及 Resilience4j 熔断保护等治理能力。 --- ## 目录 - [技术栈](#技术栈) - [项目结构](#项目结构) - [架构设计](#架构设计) - [DDD 微服务划分](#ddd-微服务划分) - [微服务治理能力](#微服务治理能力) - [网关路由](#网关路由) - [前端架构](#前端架构) - [快速开始](#快速开始) - [环境准备](#环境准备) - [编译](#编译) - [启动顺序](#启动顺序) - [访问地址](#访问地址) - [功能验证](#功能验证) - [配置动态刷新](#配置动态刷新) - [熔断降级](#熔断降级) - [负载均衡](#负载均衡) - [常见问题](#常见问题) - [相关文档](#相关文档) --- ## 技术栈 | 层次 | 技术 | |------|------| | 后端 | Spring Boot 4、Spring Cloud 2025、Eureka、Config Server、Gateway、OpenFeign、Resilience4j、MyBatis、MySQL、RabbitMQ | | 前端 | Vue 3、Vue Router、Vuex、Element Plus、Axios、Vite | | 构建 | Maven(后端)、NPM(前端) | ## 项目结构 ``` Elm_Cloud/ ├── Elm_Common/ # 公共模块:实体、Feign 客户端、JWT、统一响应、异常处理 ├── Eureka_Service_18000/ # 注册中心节点 1 ├── Eureka_Service_18001/ # 注册中心节点 2 ├── Eureka_Service_18002/ # 注册中心节点 3 ├── Config_Service_15000/ # 配置中心节点 1 ├── Config_Service_15001/ # 配置中心节点 2 ├── Config_Service_15002/ # 配置中心节点 3 ├── Gateway_Server_12000/ # API 网关 ├── User_Service_11000/ # 用户服务 ├── Merchant_Service_11001/ # 商家 + 菜品服务(实例 1,端口 11001) ├── Merchant_Service_11011/ # 商家 + 菜品服务(实例 2,端口 11011) ├── Merchant_Service_11021/ # 商家 + 菜品服务(实例 3,端口 11021) ├── Cart_Service_11002/ # 购物车服务 ├── Order_Service_11003/ # 订单服务 ├── Address_Service_11004/ # 配送地址服务 ├── vue_elm/ # Vue 3 前端 ├── docs/ # DDD 说明、Config 配置模板 ├── mvnw / mvnw.cmd # Maven Wrapper └── pom.xml # 父 POM(聚合 15 个后端模块) ``` --- ## 架构设计 ### DDD 微服务划分 | 限界上下文 | 模块 | 端口 | Eureka 名称 | 核心数据表 | |------------|------|------|-------------|------------| | 用户域 | User_Service_11000 | 11000 | user-service | user | | 商家域 | Merchant_Service_11001 / 11011 / 11021 | 11001 / 11011 / 11021 | merchant-service(三实例) | business, food | | 购物车域 | Cart_Service_11002 | 11002 | cart-service | cart | | 订单域 | Order_Service_11003 | 11003 | order-service | orders, orderDetailet | | 地址域 | Address_Service_11004 | 11004 | address-service | deliveryAddress | | 网关 | Gateway_Server_12000 | 12000 | gateway-server | — | | 注册中心 | Eureka × 3 | 18000–18002 | — | — | | 配置中心 | Config × 3 | 15000–15002 | config-service | — | **跨服务调用关系:** - 订单服务 → 购物车、商家、地址(OpenFeign) - 购物车服务 → 商家(OpenFeign) - 前端 → 全部经 API 网关访问 ### 微服务治理能力 | 能力 | 实现方式 | |------|----------| | 服务注册中心集群 | 3 节点 Eureka 互注册 | | 负载均衡 | Gateway / Feign 使用 `lb://服务名`(Spring Cloud LoadBalancer) | | 远程服务调用 | OpenFeign(`Elm_Common` 中定义客户端) | | 网关熔断降级 | Gateway + Resilience4j CircuitBreaker → `FallbackController`(JSON)+ 前端 `ServiceUnavailable.vue` | | 服务内保护 | 订单服务:Retry(购物车)、RateLimiter(商家)、Bulkhead(地址) | | 微服务网关 | JWT 鉴权、路由转发、公开路径白名单 | | 配置中心集群 | 3 节点 Config Server,Git 模式(Gitee 远程仓库) | | 动态配置刷新 | Spring Cloud Bus + RabbitMQ + `@RefreshScope` | | 统一请求日志 | `Elm_Common` 中 `RequestLoggingInterceptor` + Feign 调用日志(`elm.logging` 可配置) | ### 网关路由 前端统一通过网关 `http://localhost:12000` 访问,路径与课程单体项目保持一致。网关校验 JWT 后,向下游传递 `X-User-Id` 请求头。 | 路径前缀 | 目标服务 | 网关熔断 | |----------|----------|----------| | `/UserController/**` | user-service | breakerUser | | `/BusinessController/**` | merchant-service | breakerMerchant | | `/FoodController/**` | merchant-service | breakerMerchant | | `/CartController/**` | cart-service | breakerCart | | `/OrdersController/**` | order-service | breakerOrder | | `/DeliveryAddressController/**` | address-service | breakerAddress | ### 前端架构 前端为 **Vue 3 单页应用**,使用 Vite 构建、Element Plus 搭建界面,Vue Router(Hash 模式)实现路由切换,整体采用 **vw** 单位做移动端响应式布局。 | 类别 | 技术选型 | |------|----------| | 框架 | Vue 3(Composition API / `