ProjectsApr 1, 20264 分钟/阅读时间
在线点单平台 - Project Detail

JAVASpring MVCRabbitMQRedisMySQLJWTWebSocket
在线点单项目说明
1. 项目简介
本项目是一个基于 Spring Boot 的外卖后端项目,采用 Maven 多模块结构,覆盖了管理端与用户端的核心业务能力,包括:
- 员工与用户登录鉴权(JWT)
- 菜品/套餐/分类管理
- 购物车与下单流程
- 订单状态流转与统计报表
- Redis 缓存与一致性处理
- RabbitMQ 异步创建订单
- WebSocket 实时消息推送
- 定时任务(超时订单取消、派送中订单自动完成)
当前后端默认启动端口为 8081。
2. 仓库结构
项目采用聚合工程,根模块包含 3 个子模块:
sky-common:通用常量、异常、工具类、公共返回结构、配置属性类sky-pojo:DTO / Entity / VO 等数据模型sky-server:主服务模块(Controller / Service / Mapper / 配置 / 定时任务 / MQ / WebSocket)
目录示意:
sky-take-out
├─ sky-common
├─ sky-pojo
├─ sky-server
└─ k6_test
3. 技术栈
核心框架与组件:
- Java + Spring Boot
2.7.3 - MyBatis + PageHelper
- MySQL
- Redis
- RabbitMQ
- WebSocket
- Knife4j(Swagger 文档)
- Druid 数据源
- JWT(
jjwt)
4. 关键业务能力
4.1 鉴权与拦截
WebMvcConfiguration 注册了两个拦截器:
- 管理端:拦截
/admin/**,放行/admin/employee/login - 用户端:拦截
/user/**,放行/user/user/login
4.2 订单链路(重点)
订单创建链路做了多项增强:
- 提交幂等:基于 Redis 键避免重复提交
- 库存扣减:通过 Redis Lua 脚本原子扣减库存
- 异步落库:下单后发送 RabbitMQ 事件,由消费者创建订单和订单明细
- 分表路由:支持按月分表(可通过
sky.sharding.enabled开关控制) - 支付回调幂等:支付成功处理通过 Redis 锁防重
- WebSocket 推送:新订单/催单等消息实时推送到客户端
4.3 缓存与一致性
项目内置了缓存封装与一致性策略:
CacheClient:防缓存击穿(互斥锁)、空值缓存、TTL 抖动CacheConsistencyService:双删策略(立即删 + 延迟删)
4.4 定时任务
OrderTask 提供了两个调度任务:
- 每分钟扫描超时未支付订单并取消
- 每天凌晨 1 点自动完成超时“派送中”订单
5. 主要接口分组
按业务分为两大前缀:
- 管理端:
/admin/**- 员工:
/admin/employee - 分类:
/admin/category - 菜品:
/admin/dish - 套餐:
/admin/setmeal - 订单:
/admin/order - 工作台与报表:
/admin/workspace、/admin/report
- 员工:
- 用户端:
/user/**- 用户登录:
/user/user/login - 分类/菜品/套餐:
/user/category、/user/dish、/user/setmeal - 购物车:
/user/shoppingCart - 订单:
/user/order - 地址簿:
/user/addressBook
- 用户登录:
接口文档默认可通过:
http://localhost:8081/doc.html
6. 本地运行说明
6.1 环境要求
建议准备:
- JDK 8+
- Maven 3.6+
- MySQL 8.x
- Redis 6.x+
- RabbitMQ 3.x+
6.2 配置文件
主配置在:
sky-server/src/main/resources/application.ymlsky-server/src/main/resources/application-dev.yml
application.yml 已启用 dev 环境,并通过 sky.* 组织业务配置。
注意:当前
application-dev.yml中包含数据库、Redis、微信、OSS 等敏感信息示例。用于个人学习可行,但不建议直接用于生产或公开仓库。建议改为环境变量或私有配置中心。
6.3 启动步骤
在项目根目录执行:
mvn clean package -DskipTests
mvn -pl sky-server spring-boot:run
启动后访问:
- 服务地址:
http://localhost:8081 - 文档地址:
http://localhost:8081/doc.html - WebSocket 地址:
ws://localhost:8081/ws/{sid}
7. 压测与脚本
k6_test 目录下包含压测脚本与结果文件:
test1.js、test2.jsredis_cache_patterns.jssummary_k6_*.jsonrun_test2_with_sql.ps1
可用于对订单/缓存链路进行基础性能验证。
8. 后续优化建议
如果你计划继续完善这个项目,建议优先关注:
- 配置安全:移除仓库中的明文密钥,统一使用环境变量
- 数据库脚本:补充完整建表与初始化 SQL,降低新同学接入成本
- 可观测性:增加统一日志 traceId、慢 SQL 与关键指标监控
- 测试体系:补充 Service 层单测与关键接口集成测试
- WebSocket 任务:目前存在测试性定时广播,可按环境开关控制
这份文档基于当前仓库代码结构与配置编写,可作为项目交接、入门和二次开发的基础说明。