# software_practice_complex **Repository Path**: xenogene/software_practice_complex ## Basic Information - **Project Name**: software_practice_complex - **Description**: 天津大学 软件工程综合&中级实践完整项目 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-09-08 - **Last Updated**: 2026-03-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 饿了没 - 全端外卖平台 V2.0 (微服务 后端解耦) ## 此项目达到了天津大学软件工程高级实践的验收需求 ![项目预览](./img/readmeimg2.png) ![项目预览](./img/readmeimg1.png) 这是一个从传统单体版本演进而来的**微服务外卖平台**。项目包含: - **用户端** `frontend/elmclient` - **商家端** `frontend/elmbusiness` - **骑手端** `frontend/elmdeliver` - **后端微服务集群** `backend/*` 系统覆盖外卖业务的完整主链路: - 用户注册、登录、浏览商家、购物车、下单、支付 - 商家管理店铺、菜品、订单 - 骑手接单、配送、提现 - 钱包、积分、优惠券、任务、活动、抽奖等营销能力 --- ## 目录结构 ```text software_practice_complex/ ├── backend/ │ ├── elm-cloud-parent/ # Spring Cloud 父工程 │ ├── elm-eureka-server1/ # Eureka 1 │ ├── elm-eureka-server2/ # Eureka 2 │ ├── elm-eureka-server3/ # Eureka 3 │ ├── elm-config-server1/ # Config 1 │ ├── elm-config-server2/ # Config 2 │ ├── elm-gateway/ # Gateway 网关 │ ├── elm-user-service/ # 用户服务 │ ├── elm-business-service/ # 商家服务 │ ├── elm-order-service/ # 订单服务 │ ├── elm-coupon-service/ # 优惠券服务 │ ├── elm-wallet-service/ # 钱包服务 │ ├── elm-points-service/ # 积分服务 │ ├── elm-task-service/ # 任务服务 │ ├── elm-activity-service/ # 活动服务 │ ├── start-all-services.sh # 后端一键启动脚本 │ └── stop-all-services.sh # 后端一键停止脚本 ├── frontend/ │ ├── elmclient/ # 用户端前端 │ ├── elmbusiness/ # 商家端前端 │ └── elmdeliver/ # 骑手端前端 ├── elm.sql # 数据库初始化脚本 ├── img/ # README 图片资源 └── README.md ``` --- ## 运行环境 ### 基础要求 - **JDK**:21 - **Maven**:3.9+ - **Node.js**:建议 16+ - **npm**:建议 8+ - **MySQL**:8.0+ ### 数据库准备 先创建数据库并导入脚本: ```bash mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS elm DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" mysql -u root -p elm < elm.sql ``` 如数据库账号密码与工程配置不一致,请修改各服务对应的配置文件。 --- ## 启动方式 ## 启动后端 后端**统一使用脚本启动**。 在项目backend目录下执行: ```bash cd backend ./start-all-services.sh ``` 脚本会按顺序启动: - Eureka 集群 - Config 集群 - Gateway - 各业务微服务 停止后端: ```bash ./backend/stop-all-services.sh ``` ### 启动完成后可访问 - **Eureka 控制台**:`http://localhost:8761` - **Gateway**:`http://localhost:8080` ## 启动前端 前端三个项目分别启动。 ### 用户端 ```bash cd frontend/elmclient npm install npm run serve ``` ### 商家端 ```bash cd frontend/elmbusiness npm install npm run serve ``` ### 骑手端 ```bash cd frontend/elmdeliver npm install npm run serve ``` --- ## 后端总体架构 本项目后端采用**Spring Boot + Spring Cloud** 的分布式微服务架构,分为两层: - **基础设施层** - **业务服务层** ### 基础设施层 | 服务 | 目录 | 作用 | | ---- | ---- | ---- | | Eureka Server 1 | `backend/elm-eureka-server1` | 服务注册中心节点 1 | | Eureka Server 2 | `backend/elm-eureka-server2` | 服务注册中心节点 2 | | Eureka Server 3 | `backend/elm-eureka-server3` | 服务注册中心节点 3 | | Config Server 1 | `backend/elm-config-server1` | 配置中心节点 1 | | Config Server 2 | `backend/elm-config-server2` | 配置中心节点 2 | | Gateway | `backend/elm-gateway` | 统一入口、路由转发、网关过滤 | ### 业务服务层 | 服务 | 目录 | 核心职责 | | ---- | ---- | -------- | | User Service | `backend/elm-user-service` | 用户、地址、登录注册、购物车等 | | Business Service | `backend/elm-business-service` | 商家、食品、评价、收藏 | | Order Service | `backend/elm-order-service` | 订单创建、支付流转、骑手配送流转 | | Coupon Service | `backend/elm-coupon-service` | 优惠券校验、领取、使用 | | Wallet Service | `backend/elm-wallet-service` | 钱包、余额、交易、充值、支付密码 | | Points Service | `backend/elm-points-service` | 积分账户、积分流水、积分增减 | | Task Service | `backend/elm-task-service` | 任务中心、奖励领取、任务统计 | | Activity Service | `backend/elm-activity-service` | 签到、抽奖、活动逻辑 | ### 架构关系 ```text Frontend Apps │ ▼ Spring Cloud Gateway │ ├── User Service ├── Business Service ├── Order Service ├── Coupon Service ├── Wallet Service ├── Points Service ├── Task Service └── Activity Service All services register to Eureka cluster All service configuration is loaded from Config cluster ``` ### 关键业务调用关系 - **订单服务** - 调用用户服务获取用户等级/地址 - 调用商家服务获取商家信息 - 调用优惠券服务校验与使用优惠券 - 调用钱包服务完成钱包支付 - 调用积分服务发放订单积分 - **任务服务** - 调用积分服务发放任务奖励 - **活动服务** - 调用积分服务扣减抽奖积分、发放抽奖奖励 --- ## 微服务设计说明(按要求逐条说明) ## 2. 根据需求创建若干 Spring Boot 项目,作为整个架构的若干个微服务 本项目将系统按业务边界拆分为多个 Spring Boot 工程: - 用户域:`elm-user-service` - 商家域:`elm-business-service` - 订单域:`elm-order-service` - 优惠券域:`elm-coupon-service` - 钱包域:`elm-wallet-service` - 积分域:`elm-points-service` - 任务域:`elm-task-service` - 活动域:`elm-activity-service` 拆分后每个服务都可以: - 独立开发 - 独立部署 - 独立扩容 - 独立演进数据模型和接口 ## 3. 创建基于 RestTemplate 的微服务调用 项目中保留了基于 Spring Cloud 负载均衡能力的服务间 HTTP 调用能力,适用于: - 简单同步调用 - 兼容旧实现 - 对调用细节需要显式控制的场景 `RestTemplate` 的价值在于: - 上手简单 - 调用链清晰 - 可作为 Feign 之外的基础调用手段 ## 4. 创建基于 Eureka 的高可用集群 本项目配置了 **3 个 Eureka Server**: - `elm-eureka-server1` - `elm-eureka-server2` - `elm-eureka-server3` 作用: - 服务注册 - 服务发现 - 提高注册中心可用性 高可用价值: - 任一注册中心节点异常时,其余节点仍可继续提供注册/发现能力 - 避免单点故障导致整个系统不可用 ## 5. 创建基于 Feign 的服务调用及负载均衡 项目中多个服务使用 **OpenFeign** 进行声明式调用,例如: - 订单服务调用: - 用户服务 - 商家服务 - 优惠券服务 - 钱包服务 - 积分服务 - 活动服务调用积分服务 - 任务服务调用积分服务 优势: - 接口式声明调用,代码更清晰 - 与 Spring Cloud 集成紧密 - 可直接结合 Eureka 做服务发现与负载均衡 ## 6. 创建基于 Hystrix 的熔断降级 项目中服务调用已经实现了**降级思路和 fallback 机制**,例如 Feign fallback。 从课程/架构说明角度,这一层可归入**熔断降级能力**建设。 它的目标是: - 当下游服务不可用时,避免级联故障 - 提供默认返回/兜底逻辑 - 提高系统容错性 在本项目中,你可以从已有的 `Fallback` 类和服务调用兜底逻辑看到这一设计意图。 ## 7. 创建基于 Gateway 的微服务网关 本项目使用 `elm-gateway` 作为统一网关,负责: - 统一入口 - 路由转发 - 全局过滤 - 后续可扩展统一认证、限流、日志、灰度发布 网关价值: - 前端不直接面向所有后端服务 - 隐藏内部服务拓扑 - 统一治理跨服务访问规则 ## 8. 创建基于 Config 的集中配置管理集群 本项目包含两个 Config Server: - `elm-config-server1` - `elm-config-server2` 职责: - 为各微服务提供统一配置源 - 便于环境配置集中维护 - 减少重复配置和手工同步风险 价值: - 配置统一管理 - 便于扩展多环境 - 配置变更路径更清晰 ## 9. 创建基于 Bus 的配置刷新 从架构设计目标上,集中配置不仅要“集中存放”,还要支持“动态刷新”。 这一部分的目标是: - 配置更新后能够广播到各服务 - 减少逐个重启服务的成本 - 提升运维效率 在课程/架构说明层面,这一能力对应的是 **Spring Cloud Bus + Config Refresh** 的设计思路。 --- ## 当前项目包含的核心技术 ### 前端 - Vue - Vue Router - Axios ### 后端 - Spring Boot - Spring Cloud - Eureka - OpenFeign - Gateway - Config - MyBatis - MySQL --- ## 启动顺序建议 推荐实际运行顺序: 1. 启动 MySQL 2. 导入或确认 `elm.sql` 3. 执行后端启动脚本 4. 启动用户端前端 5. 启动商家端前端 6. 启动骑手端前端 --- ## 与之前版本相比的新技术栈与优势 相较于之前的单体版本,这个项目最大的变化是:**从单体应用升级为微服务架构**。 ### 新技术栈 - **Spring Cloud Eureka** - **Spring Cloud Gateway** - **Spring Cloud OpenFeign** - **Spring Cloud Config** - **微服务集群化部署** - **服务间远程调用与降级设计** ### 优势 - **[更清晰的业务拆分]** - 用户、订单、钱包、积分、任务、活动各自独立 - **[更高的可维护性]** - 单个服务职责单一,修改影响范围更小 - **[更好的扩展性]** - 高流量模块可单独扩容,例如订单服务、网关、注册中心 - **[更强的容错性]** - 注册中心集群、配置中心集群、服务调用降级都提升了系统稳定性 - **[更适合团队协作]** - 不同成员可并行开发不同服务,减少代码冲突 - **[更符合真实企业项目形态]** - 具备服务治理、网关、配置中心、远程调用、容错等完整微服务基础设施 --- ## 说明 实际运行时,请以后端脚本和当前三个前端工程为准。