# easyWebCloud **Repository Path**: lxj-creator/easy-web-cloud ## Basic Information - **Project Name**: easyWebCloud - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-29 - **Last Updated**: 2026-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EasyWebCloud > 基于 Spring Cloud + Alibaba 的微服务学习项目,由 EasyWeb 单体架构演进而来。 ## 项目简介 EasyWebCloud 是一个用于学习和实践微服务架构设计与开发的项目。项目从 EasyWeb 单体应用演进为基于 Spring Cloud 的微服务架构,涵盖了微服务开发中的核心组件和常见场景,包括服务注册与发现、配置中心、网关路由、服务间通信、认证鉴权、消息队列等。 ## 技术栈 | 技术 | 版本 | 说明 | |------|------|------| | Java | 1.8 | 开发语言 | | Spring Boot | 2.7.18 | 基础框架 | | Spring Cloud | 2021.0.8 | 微服务框架 | | Spring Cloud Alibaba | 2021.0.5.0 | 微服务增强组件 | | Nacos | v2.3.2 (Docker) | 服务注册与发现 / 配置中心 | | Spring Cloud Gateway | — | API 网关 | | OpenFeign | — | 服务间声明式调用 | | LoadBalancer | — | 客户端负载均衡 | | MyBatis-Plus | 3.5.5 | ORM 框架 | | Druid | 1.2.21 | 数据库连接池 | | MySQL | 8.0 (Docker) | 关系型数据库 | | Sa-Token | 1.39.0 | 轻量级认证鉴权框架 | | JWT (jjwt) | 0.11.5 | Token 生成与校验 | | RocketMQ | Starter 2.2.3 / Broker 4.9.4 (Docker) | 分布式消息队列 | | Hutool | 5.8.25 | Java 工具类库 | | Lombok | — | 代码简化工具 | ## 环境要求 - **JDK** 1.8+ - **Maven** 3.x - **MySQL** 5.7+ - **Nacos** 2.x(默认地址:`127.0.0.1:8848`) - **RocketMQ**(默认 NameServer 地址:`127.0.0.1:9876`,仅订单服务需要) - **Seata Server** 1.7.0(TC,默认端口 `8091`,注册 Nacos;启动脚本 `D:\running\start-seata.bat`,手机端 TCC 链路需要) ## 项目结构 ``` EasyWebCloud/ ├── cloud-common/ # 公共模块 - 统一响应、枚举、异常、工具类 ├── cloud-gateway/ # 网关服务 - 统一入口、路由转发、鉴权过滤 ├── cloud-system/ # 系统用户服务 - 用户管理、权限管理 ├── cloud-auth/ # 认证服务 - 登录、登出、Token 管理 ├── cloud-order/ # 订单服务 - 订单管理、MQ 消息驱动 ├── cloud-ai/ # AI 中转服务 - 对接 Python 智能问答(SSE 流式转发) ├── cloud-zf/ # 综服提单服务 - 综合服务需求单受理/分派/处理闭环 + Seata TCC 参与者 ├── cloud-sms/ # 短信服务 - MQ 事件消费,短信流水落库与模拟发送 ├── cloud-app/ # 手机端应用服务 - H5 九宫格综服提单(Seata TCC 发起方) └── pom.xml # 父 POM(依赖版本统一管理) ``` ## 模块说明 ### cloud-common — 公共模块 **职责**:为所有微服务模块提供共享的基础组件,避免重复代码。 | 包路径 | 说明 | |--------|------| | `result.Result` | 统一响应结果封装,提供 `success()` / `fail()` 静态工厂方法 | | `enums.ResultCode` | 统一响应状态码枚举(200 成功、4xx 客户端错误、5xx 服务端错误、1xxx 业务错误、2xxx 微服务错误) | | `exception.BusinessException` | 业务异常类,支持 `ResultCode` 枚举或自定义 code/message | | `util.ExceptionUtil` | 异常堆栈简化工具,仅保留项目包名(`lxj.easy`)下的堆栈信息 | | `util.IpUtil` | IP 地址工具类,基于 `ThreadLocal` 存储,支持多级代理头解析 | | `util.TraceIdUtil` | 链路追踪 ID 工具类,基于 `ThreadLocal`,用于生成和传递 traceId | **依赖**:Servlet API、Hutool > 详细说明见 [cloud-common/README.md](cloud-common/README.md) --- ### cloud-gateway — 网关服务 **职责**:作为所有外部请求的统一入口,负责路由转发和鉴权过滤。 | 特性 | 说明 | |------|------| | 端口 | `8080` | | 服务名 | `cloud-gateway` | | 路由规则 | `/api/system/**` → `cloud-system`、`/api/auth/**` → `cloud-auth`、`/api/order/**` → `cloud-order`、`/api/ai/**` → `cloud-ai`、`/api/zf/**` → `cloud-zf`、`/api/sms/**` → `cloud-sms`、`/api/app/**` → `cloud-app` | | 服务发现 | 集成 Nacos,支持动态路由(`discovery.locator.enabled=true`) | | 负载均衡 | 集成 Spring Cloud LoadBalancer | | 配置中心 | 集成 Nacos Config | **路由流程**: ``` 客户端请求 → Gateway(8080) → 路径匹配 → StripPrefix → 转发到后端服务 ``` > 详细说明见 [cloud-gateway/README.md](cloud-gateway/README.md) --- ### cloud-system — 系统用户服务 **职责**:管理系统用户数据,提供用户查询接口,供其他服务通过 Feign 调用。 | 特性 | 说明 | |------|------| | 端口 | `8081` | | 服务名 | `cloud-system` | | 数据库 | `easyweb_cloud`(MySQL) | | ORM | MyBatis-Plus + Druid 连接池 | | 数据表 | `sys_user`(用户ID、用户名、真实姓名、密码、手机号) | **接口列表**: | 方法 | 路径 | 说明 | |------|------|------| | GET | `/user/info/{userName}` | 根据用户名查询用户信息 | **被依赖方**:`cloud-auth` 服务通过 Feign 调用本服务获取用户信息。 > 详细说明见 [cloud-system/README.md](cloud-system/README.md) --- ### cloud-auth — 认证服务 **职责**:处理用户登录/登出,基于 Sa-Token + JWT 管理 Token,不直接操作数据库。 | 特性 | 说明 | |------|------| | 端口 | `8082` | | 服务名 | `cloud-auth` | | 认证框架 | Sa-Token 1.39.0 | | Token 风格 | JWT(无状态,适合微服务) | | Token 有效期 | 7 天(604800 秒) | | 数据库 | 无(通过 Feign 调用 cloud-system 获取用户数据) | **接口列表**: | 方法 | 路径 | 说明 | |------|------|------| | POST | `/auth/login` | 用户登录(入参:`userName`、`password`) | | POST | `/auth/logout` | 用户登出 | **登录流程**: ``` 客户端 → Gateway → /api/auth/login → cloud-auth → Feign 调用 cloud-system 查询用户 → 校验密码 → Sa-Token 生成 JWT Token → 返回 Token + 用户信息 ``` > 详细说明见 [cloud-auth/README.md](cloud-auth/README.md) --- ### cloud-order — 订单服务 **职责**:管理订单的创建与查询,集成 RocketMQ 实现消息驱动。 | 特性 | 说明 | |------|------| | 端口 | `8083` | | 服务名 | `cloud-order` | | 数据库 | `easyweb_cloud`(MySQL) | | ORM | MyBatis-Plus + Druid 连接池 | | 消息队列 | RocketMQ(Producer Group:`cloud-order-producer-group`) | | 数据表 | `cloud_order_info`(订单号、用户ID、商品名、金额、状态、时间) | **接口列表**: | 方法 | 路径 | 说明 | |------|------|------| | POST | `/order/create` | 创建订单(入参:`userId`、`productName`、`amount`) | | GET | `/order/info/{orderNo}` | 根据订单号查询订单 | **订单状态流转**: ``` 待支付(0) → 已支付(1) → 已发货(2) → 已完成(3) ↓ 已取消(4) ``` **特色设计**: - **CAS 乐观锁**:`OrderInfoMapper.casUpdateStatus()` 通过 `WHERE status = #{expectedStatus}` 实现状态更新的幂等性保障 - **RocketMQ 集成**:预留了 `consumer` 和 `producer` 包,支持消息驱动的订单处理 > 详细说明见 [cloud-order/README.md](cloud-order/README.md) --- ### cloud-ai — AI 中转服务 **职责**:对接 Python AI(ChatDoc)智能问答接口,前端请求经本服务转发到 Python FastAPI,SSE 事件流逐行透传回前端。 | 特性 | 说明 | |------|------| | 端口 | `8084` | | 服务名 | `cloud-ai` | | 对外接口 | `POST /api/ai/chat/stream`(SSE,入参 `{"question":"..."}`) | | 上游接口 | Python FastAPI `POST http://127.0.0.1:8000/api/v1/ask/stream` | | 转发方式 | `SseEmitter` 透传,事件格式与 Python 一致(`delta` / `done` / `error`) | | 数据库 | 无 | **调用链**: ``` 前端 → Gateway(8080) /api/ai/chat/stream → StripPrefix=2 → cloud-ai(8084) /chat/stream → Python FastAPI(8000) /api/v1/ask/stream → SSE 逐行透传回前端 ``` **前端无需改动**:请求仍走 Vite proxy `/api` → 网关 `:8080`,事件协议与直连 Python 完全一致。 > 详细说明见 [cloud-ai/README.md](cloud-ai/README.md) --- ### cloud-zf — 综服提单服务 **职责**:综合服务需求单「提单 → 分单 → 处理 → 确认」闭环受理;并作为 **Seata TCC 远程参与者**(`@LocalTCC` 分支)支撑手机端跨库提单。 | 特性 | 说明 | |------|------| | 端口 | `8085` | | 服务名 | `cloud-zf` | | 数据库 | `easyweb_zf`(独立库,脚本 `sql/zf-schema.sql`) | | 数据表 | `t_zf_request`(需求单主表)、`t_zf_request_trace`(流转履历)、`t_zf_tcc_log`(TCC 日志) | | 消息队列 | RocketMQ 生产者(`cloud-zf-producer-group`),需求单处理完成时投递 `zf-topic:PROCESS_DONE` | | 短信联动 | 处理完成 → 投递消息 → 短信服务 `cloud-sms` 消费后通知需求人 | > 详细说明见 [cloud-zf/README.md](cloud-zf/README.md) --- ### cloud-sms — 短信服务 **职责**:消费综服业务域事件(RocketMQ),以「业务流水号」落库管理短信发送(模拟通道,不真实下发)。 | 特性 | 说明 | |------|------| | 端口 | `8086` | | 服务名 | `cloud-sms` | | 数据库 | `easyweb_sms`(独立库,脚本 `sql/sms-schema.sql`) | | 数据表 | `t_sms_record`(短信发送流水,`uk_biz(biz_type,biz_no)` 幂等键) | | 消息队列 | RocketMQ 消费者(`cloud-sms-consumer-group`),监听 `zf-topic:PROCESS_DONE` | | 短信通道 | `MockSmsGateway` 模拟(`sms.mock.fail-rate` 可演练失败流水) | > 详细说明见 [cloud-sms/README.md](cloud-sms/README.md) --- ### cloud-app — 手机端应用服务 **职责**:手机端 H5 九宫格「综服提单」入口;作为 **Seata TCC 事务发起方**,把本地申请记录与综服受理单纳入同一全局事务。 | 特性 | 说明 | |------|------| | 端口 | `8087` | | 服务名 | `cloud-app` | | 数据库 | `easyweb_app`(独立库,脚本 `sql/app-schema.sql`) | | 数据表 | `t_app_zf_request`(移动端申请,`uk_tcc_xid` 幂等键) | | 分布式事务 | Seata TCC(TC 8091 / 分组 `easyweb_tx_group`);本地 `@LocalTCC` 分支 + Feign 调 cloud-zf 远程分支 | | 前端页面 | ChatDoc 工程 `D:\PythonProject\ChatDoc\web`(九宫格 → `/zf-app`) | **TCC 链路**:`@GlobalTransactional` → 本地 Try(5 预留) → Feign 调 `cloud-zf /zf/tcc/try`(5 冻结) → 全局提交时 TC 回调两侧 Confirm(1 生效 / 10 待分单);任一步失败则回滚为 0 / 70。 > 详细说明见 [cloud-app/README.md](cloud-app/README.md) --- ## 架构总览 ``` ┌─────────────────┐ │ 客户端请求 │ └────────┬────────┘ │ ┌────────▼────────┐ │ cloud-gateway │ 端口: 8080 │ (统一入口/路由) │ └────────┬────────┘ │ ┌────────────────────┼────────────────────┐ │ │ │ ┌────────▼────────┐ ┌────────▼────────┐ ┌────────▼────────┐ │ cloud-system │ │ cloud-auth │ │ cloud-order │ │ (系统用户服务) │ │ (认证服务) │ │ (订单服务) │ │ 端口: 8081 │ │ 端口: 8082 │ │ 端口: 8083 │ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │ │ │ │ Feign 调用│ │ ◄───────────────────┘ │ │ │ ┌────────▼───────────────────────────────────────▼────────┐ │ MySQL (easyweb_cloud) │ └─────────────────────────────────────────────────────────┘ │ ┌────────▼────────┐ │ RocketMQ │ NameServer: 9876 │ (消息队列) │ └─────────────────┘ ┌─────────────────┐ ┌─────────────────────────────────┐ │ cloud-ai │ │ Python FastAPI (ChatDoc) │ │ (AI 中转服务) │──►│ POST :8000 /api/v1/ask/stream │ │ 端口: 8084 │ │ SSE 流式问答 │ └─────────────────┘ └─────────────────────────────────┘ ┌─────────────────┐ │ cloud-common │ (公共模块,被所有服务依赖) │ (无端口) │ └─────────────────┘ ┌─────────────────┐ │ Nacos │ 地址: 127.0.0.1:8848 │ (注册/配置中心) │ └─────────────────┘ ``` ## 服务间调用关系 | 调用方 | 被调用方 | 调用方式 | 说明 | |--------|---------|---------|------| | cloud-auth | cloud-system | OpenFeign | 登录时查询用户信息 | | cloud-gateway | cloud-system / cloud-auth / cloud-order / cloud-ai | 路由转发 | 根据路径前缀转发请求 | | cloud-ai | Python FastAPI (ChatDoc) | RestTemplate | 智能问答 SSE 流式转发 | ## 快速开始 项目提供三种启动方式,任选其一(由易到难): - **方式一(本地安装)**:在本地手动安装 Nacos、MySQL、RocketMQ - **方式二(Docker 手动)**:逐步执行 Docker 命令,适合学习 Docker 的初学者 - **方式三(Docker Compose)**:一条命令启动所有基础设施,操作最简便 > 三种方式只是基础设施的启动方式不同,微服务本身的编译和启动方式完全一致。 --- ### 方式一:本地手动安装 > 适合:不想用 Docker,或需要在本地安装版开发的同学 > > 前提:本地已安装 JDK 1.8、Maven、MySQL 5.7+ #### 1. 安装并启动 MySQL ```bash # 下载安装 MySQL 5.7+ # https://dev.mysql.com/downloads/ # 连接 MySQL,创建数据库并导入表结构 mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS easyweb_cloud DEFAULT CHARACTER SET utf8mb4;" mysql -u root -p easyweb_cloud < sql/init.sql ``` #### 2. 安装并启动 Nacos ```bash # 下载 Nacos # https://github.com/alibaba/nacos/releases # 解压后,以单机模式启动 startup.cmd -m standalone # Windows sh startup.sh -m standalone # Linux/Mac ``` 访问 http://localhost:8848/nacos ,默认账号密码:`nacos` / `nacos` #### 3. 安装并启动 RocketMQ(可选,仅订单服务需要) ```bash # 下载 RocketMQ # https://rocketmq.apache.org/docs/quick-start/ # 启动 NameServer start.cmd mqnamesrv # Windows sh mqnamesrv & # Linux/Mac # 启动 Broker start.cmd mqbroker -n localhost:9876 # Windows sh mqbroker -n localhost:9876 & # Linux/Mac ``` #### 4. 编译项目 ```bash mvn clean install -DskipTests ``` #### 5. 按顺序启动微服务 ```bash # 1. 启动网关服务 cd cloud-gateway && mvn spring-boot:run # 2. 启动系统用户服务 cd cloud-system && mvn spring-boot:run # 3. 启动认证服务 cd cloud-auth && mvn spring-boot:run # 4. 启动订单服务 cd cloud-order && mvn spring-boot:run ``` > 本地安装模式下,MySQL 密码默认为 `root`,与 `application.yml` 中配置一致,无需额外覆盖。 --- ### 方式二:Docker 逐步安装(学习 Docker) > 适合:想学习 Docker 基本操作、理解容器化部署的初学者 > > 前提:已安装 [Docker](https://docs.docker.com/get-docker/) 以下步骤将带你一步步用 Docker 命令启动每个服务,理解每个组件的作用。 #### 1. 创建 Docker 网络 所有容器放在同一个网络中,方便互相通信: ```bash docker network create easyweb-net ``` #### 2. 启动 MySQL ```bash # 拉取 MySQL 8.0 镜像 docker pull mysql:8.0 # 启动 MySQL 容器 docker run -d \ --name easyweb-mysql \ --network easyweb-net \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root123 \ -e MYSQL_DATABASE=easyweb_cloud \ -e TZ=Asia/Shanghai \ -v %cd%/sql/init.sql:/docker-entrypoint-initdb.d/init.sql:ro \ mysql:8.0 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci \ --default-authentication-plugin=mysql_native_password docker exec -it easyweb-mysql mysql -uroot -proot123 -e "CREATE DATABASE IF NOT EXISTS nacos_config DEFAULT CHARACTER SET utf8mb4;" ``` **参数解释**: | 参数 | 说明 | |------|------| | `-d` | 后台运行 | | `--name` | 容器名称 | | `--network` | 加入指定网络 | | `-p 3306:3306` | 端口映射(宿主机:容器) | | `-e MYSQL_ROOT_PASSWORD` | 设置 root 密码 | | `-e MYSQL_DATABASE` | 自动创建数据库 | | `-v ...init.sql` | 挂载初始化脚本,首次启动自动执行 | ```bash # 查看日志,等待 MySQL 完全启动 docker logs -f easyweb-mysql # 看到 "ready for connections" 后按 Ctrl+C 退出 ``` #### 3. 启动 Nacos ```bash # 拉取 Nacos 镜像 docker pull nacos/nacos-server:v2.3.2 # 启动 Nacos 容器(单机模式) docker run -d \ --name easyweb-nacos \ --network easyweb-net \ -p 8848:8848 \ -p 9848:9848 \ -e MODE=standalone \ nacos/nacos-server:v2.2.3 # 制定mysql数据源 docker rm -f easyweb-nacos && docker run -d --name easyweb-nacos --network easyweb-net -p 8848:8848 -p 9848:9848 -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=easyweb-mysql -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root123 nacos/nacos-server:v2.3.2 ``` ```bash # 验证 Nacos 是否启动成功 # 浏览器访问:http://localhost:8848/nacos # 默认账号密码:nacos / nacos ``` #### 4. 启动 RocketMQ(可选,仅订单服务需要) ```bash # 4.1 启动 NameServer docker pull apache/rocketmq:4.9.4 docker run -d \ --name easyweb-rocketmq-namesrv \ --network easyweb-net \ -p 9876:9876 \ -e JAVA_OPT_EXT="-Xms256m -Xmx256m -Xmn128m" \ apache/rocketmq:4.9.4 \ sh mqnamesrv docker run -d --name easyweb-rocketmq-namesrv --network easyweb-net -p 9876:9876 -e JAVA_OPT_EXT="-Xms256m -Xmx256m -Xmn128m" apache/rocketmq:4.9.4 sh mqnamesrv # 4.2 启动 Broker docker run -d --name easyweb-rocketmq-broker \ --restart unless-stopped \ --network easyweb-net \ -p 10911:10911 \ -p 10909:10909 \ -e NAMESRV_ADDR=easyweb-rocketmq-namesrv:9876 \ -e JAVA_OPT_EXT="-Xms256m -Xmx256m -Xmn128m" \ apache/rocketmq:4.9.4 \ sh mqbroker -n easyweb-rocketmq-namesrv:9876 autoCreateTopicEnable=true docker run -d --name easyweb-rocketmq-broker --network easyweb-net -p 10911:10911 -p 10909:10909 -e NAMESRV_ADDR=easyweb-rocketmq-namesrv:9876 -e JAVA_OPT_EXT="-Xms256m -Xmx256m -Xmn128m" apache/rocketmq:4.9.4 sh -c "echo 'brokerIP1=127.0.0.1' > /home/rocketmq/rocketmq-4.9.4/conf/broker.conf && sh mqbroker -n easyweb-rocketmq-namesrv:9876" ``` #### 5. 查看所有容器状态 ```bash docker ps --filter "name=easyweb-" ``` 预期输出: | 验证方式 | 说明 | |----------|------| | `docker-compose ps` | 查看所有容器状态 | | `docker ps --filter "name=easyweb-"` | 筛选 EasyWeb 容器 | #### 6. 编译并启动微服务 > MySQL 密码为 `root123`,需要数据库的服务通过启动参数覆盖: ```bash # 先编译项目 mvn clean install -DskipTests # 启动网关服务 cd cloud-gateway && mvn spring-boot:run # 启动系统用户服务 cd cloud-system && mvn spring-boot:run -Dspring-boot.run.arguments="--spring.datasource.password=root123" # 启动认证服务 cd cloud-auth && mvn spring-boot:run # 启动订单服务 cd cloud-order && mvn spring-boot:run -Dspring-boot.run.arguments="--spring.datasource.password=root123" ``` #### 7. 停止所有容器 ```bash # 逐个停止并删除 docker stop easyweb-mysql easyweb-nacos easyweb-rocketmq-broker easyweb-rocketmq-namesrv docker rm easyweb-mysql easyweb-nacos easyweb-rocketmq-broker easyweb-rocketmq-namesrv # 删除网络 docker network rm easyweb-net ``` --- ### 方式三:Docker Compose 一键启动 > 适合:已了解 Docker 基本操作,想快速跑起来看效果的同学 > > 前提:已安装 [Docker](https://docs.docker.com/get-docker/) 和 [Docker Compose](https://docs.docker.com/compose/install/) #### 1. 启动基础设施 ```bash # 在项目根目录下执行,一条命令启动 Nacos + MySQL + RocketMQ docker-compose up -d ``` 该命令会启动以下容器: | 容器 | 端口 | 说明 | |------|------|------| | `easyweb-mysql` | 3306 | MySQL 8.0(自动初始化库表,密码 `root123`) | | `easyweb-nacos` | 8848、9848 | Nacos v2.3.2 | | `easyweb-rocketmq-namesrv` | 9876 | RocketMQ 4.9.4 NameServer | | `easyweb-rocketmq-broker` | 10911、10909 | RocketMQ 4.9.4 Broker | | `easyweb-rocketmq-dashboard` | 19876 | RocketMQ 管理面板(可选) | #### 2. 等待就绪 ```bash # 查看容器状态(全部显示 healthy/running 即可) docker-compose ps ``` #### 3. 编译并启动微服务 > **注意**:Docker 模式下 MySQL 密码为 `root123`,需通过启动参数覆盖(`cloud-system` 和 `cloud-order` 需要数据库): ```bash # 先编译项目 mvn clean install -DskipTests # 启动网关服务(无数据库,直接启动) cd cloud-gateway && mvn spring-boot:run # 启动系统用户服务(覆盖数据库密码) cd cloud-system && mvn spring-boot:run -Dspring-boot.run.arguments="--spring.datasource.password=root123" # 启动认证服务(无数据库,直接启动) cd cloud-auth && mvn spring-boot:run # 启动订单服务(覆盖数据库密码) cd cloud-order && mvn spring-boot:run -Dspring-boot.run.arguments="--spring.datasource.password=root123" ``` #### 4. 停止 ```bash # 停止所有容器 docker-compose down # 停止并清除数据(会删除 MySQL 数据,谨慎使用) docker-compose down -v ``` --- ### 验证服务(三种方式通用) ```bash # 通过网关访问认证服务(登录) curl -X POST http://localhost:8080/api/auth/auth/login \ -H "Content-Type: application/json" \ -d '{"userName":"admin","password":"123456"}' # 通过网关访问订单服务(创建订单) curl -X POST "http://localhost:8080/api/order/order/create?userId=1&productName=测试商品&amount=99.99" ``` **预期响应**: ```json { "code": 200, "message": "操作成功", "data": { "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...", "userId": 1, "userName": "admin", "relName": "管理员" } } ``` **测试账号**(`sql/init.sql` 中预置): | 用户名 | 密码 | 真实姓名 | |--------|------|----------| | `admin` | `123456` | 管理员 | | `test` | `123456` | 测试用户 | ## 依赖版本管理 项目采用 Maven 父 POM 统一管理所有依赖版本,子模块无需重复声明版本号: ```xml 2021.0.8 2021.0.5.0 3.5.5 1.39.0 ``` ## 后续规划 - [x] 网关层集成 Sa-Token 鉴权过滤器 - [ ] 全局异常处理器(`@ControllerAdvice`) - [ ] 接入 Sentinel 实现限流熔断 - [ ] 接入 Seata 实现分布式事务 - [ ] 完善 RocketMQ 消费者逻辑 - [ ] 接入 Sleuth + Zipkin 实现链路追踪 - [ ] 接入 ELK 实现日志收集与分析