第 12 章 · 毕业项目:svc-spring 微服务
本章目标:在 ch01~ch11 基础上,独立交付 svc-spring-demo 微服务毕业项目;整合 Nacos、Gateway、Feign、Stream、Seata、BFF、Tracing、OAuth2、契约测试;按 7 天计划实施;通过 100 分验收表自评;完成 Gateway 冒烟与答辩演示;对照 shop-spring-demo 单体 MVP 说明架构演进。
学时建议:7 天 × 6~8 小时(合计 42~56 小时)
前置:完成 spring-cloud-web ch01~ch11;spring-boot-web ch12 单体毕业项目经验。
12.1 项目背景与边界
svc-spring-demo 是虚构的「贤紫电商微服务练习平台」,将 shop-spring-demo 拆分为可独立部署的服务,统一经 https://api.example.com 对外。
┌─────────────────────────────────────────────────────────────────┐
│ svc-spring-demo 毕业项目(本章) │
├──────────┬──────────┬──────────┬──────────┬────────────────────┤
│ user-svc │product-svc│order-svc │inventory │ gateway + bff │
│ 认证资料 │ 商品 CRUD │ 下单流程 │ 库存异步 │ 入口聚合 + 鉴权 │
├──────────┴──────────┴──────────┴──────────┴────────────────────┤
│ Nacos │ RabbitMQ │ Seata TC │ Zipkin │ auth-svc │ Redis │
└─────────────────────────────────────────────────────────────────┘
| 模块 | 毕业必须 | 不做(ch13~ch19 进阶) |
|---|---|---|
| 服务拆分 | 至少 4 业务服务 + gateway | Istio 服务网格全量 |
| 注册配置 | Nacos 发现 + 共享配置 | 配置加密 KMS |
| 网关 | 路由、CORS、限流、JWT | 灰度权重(ch15) |
| 调用 | OpenFeign + 熔断 | gRPC |
| 消息 | 订单创建事件 → 库存/通知 | CQRS 读模型(ch16) |
| 事务 | Seata AT 教学演示 或 消息最终一致二选一 | TCC 生产级 |
| BFF | 订单详情聚合 | 多 BFF(移动/Web) |
| 可观测 | Zipkin + Actuator | Grafana 告警(ch18) |
| 测试 | 契约或 WireMock + 冒烟脚本 | 全链路压测(ch17) |
严禁真实内网地址、生产密钥、客户数据。统一 api.example.com、nacos.example.com。
12.2 技术栈与仓库结构
svc-spring-demo/ # Maven 父工程
├── pom.xml # dependencyManagement, Spring Cloud 2023
├── svc-common/ # DTO, Result, 错误码, Feign 接口(可选)
├── gateway-svc/
├── bff-svc/
├── auth-svc/ # OAuth2 授权服务器(简化)
├── user-svc/
├── product-svc/
├── order-svc/
├── inventory-svc/
├── notify-svc/ # 消息消费者(选修)
├── deploy/
│ ├── docker-compose.infra.yml # Nacos, MySQL×N, Redis, RabbitMQ, Zipkin, Seata
│ ├── docker-compose.apps.yml # 各服务镜像
│ └── k8s/ # ch19 占位
├── docs/
│ ├── ARCHITECTURE.md
│ ├── API.md
│ ├── RUNBOOK.md
│ └── SELF_REVIEW.md # 100 分表
└── scripts/
├── smoke-svc.sh
└── init-db.sql
| 组件 | 版本基线 |
|---|---|
| JDK | 21 |
| Spring Boot | 3.2+ / 3.3+ |
| Spring Cloud | 2023.0.x |
| Spring Cloud Alibaba | 2023.0.x |
12.3 核心 API 清单(经 Gateway)
| 方法 | 路径 | 服务 | 说明 |
|---|---|---|---|
| POST | /oauth/token | auth-svc | 获取 JWT(教学) |
| POST | /api/v1/auth/register | user-svc | 注册 |
| GET | /api/v1/products | product-svc | 分页列表 |
| POST | /api/v1/products | product-svc | 创建(ADMIN) |
| POST | /api/v1/orders | order-svc | 创建订单 |
| GET | /api/v1/orders/me | order-svc | 我的订单 |
| GET | /bff/v1/orders/{id}/detail | bff-svc | 聚合详情 |
| GET | /actuator/health | 各服务 | 健康检查 |
12.4 七天实施计划
| 天 | 目标 | 交付物 |
|---|---|---|
| D1 | 基础设施 | docker-compose.infra.yml 启动 Nacos/MySQL/Redis/RabbitMQ |
| D2 | 核心服务 | user-svc + product-svc 注册 Nacos,Gateway 路由通 |
| D3 | 订单链路 | order-svc + Feign 调商品/用户,熔断配置 |
| D4 | 异步与库存 | Stream 事件,inventory-svc 消费扣库存 |
| D5 | 事务/BFF | Seata 演示或确认消息幂等;bff-svc 订单详情 |
| D6 | 安全与追踪 | auth-svc JWT;Zipkin 全链路;契约测试 1 组 |
| D7 | 文档与答辩 | 冒烟脚本、架构图、100 分自评、演示录屏 |
每日结束运行 scripts/smoke-svc.sh(可逐步扩展用例)。
12.5 数据隔离
| 服务 | 数据库 | 表(示例) |
|---|---|---|
| user-svc | user_db | users |
| product-svc | product_db | products |
| order-svc | order_db | orders, order_items |
| inventory-svc | inventory_db | stock, undo_log |
禁止跨库 JOIN;需要数据时走 Feign 或事件同步。