← 返回文章详情

2025.12 - 2026.01 · 独立开发

基于 Spring Boot 3 的影评与票务管理系统

项目面向热门档期线上购票高峰,覆盖电影检索、在线选座、订单支付、影评互动与后台管理。核心目标是解决高并发下超卖和超时订单释放问题,同时保证检索性能与工程可维护性。实现过程中我重点控制了座位状态与订单状态的边界一致性,并补齐了异常回滚与日志追踪链路。

  • Spring Boot 3
  • MyBatis Plus
  • MySQL 8
  • Redis 7
  • RabbitMQ
  • Elasticsearch 7.17
  • MinIO
  • Nacos
  • Vue 3
  • Docker

1. 订单超时释放:15 分钟(TTL + DLX 自动关单) 2. 检索规模:百万级数据(文档中描述为毫秒级检索体验) 3. 核心链路:锁座/下单/支付/退款(完整订单生命周期闭环)

查看仓库

项目背景

1. 来源于 JavaEE 课程结课项目,按企业级系统标准设计。 2. 目标不仅是完成业务功能,还要验证高并发场景下的稳定性和一致性方案。 3. 开发过程按真实业务压测思路推进,重点关注异常流和恢复流,不只跑通 happy path。

相关文档预览

要解决的问题

1. 多人并发抢同一座位时,数据库事务单独处理容易发生撞座与超卖。 2. 待支付订单若长期占座,会导致库存“假紧张”,影响后续购票转化。 3. 传统 SQL 模糊查询在电影多字段检索场景下响应慢、体验差。

我负责的部分

1. 独立完成需求分析、系统设计、数据库建模与接口设计。 2. 实现订单中心核心链路:锁座、下单、支付、取消、退款、库存释放。 3. 落地检索、缓存、消息队列、对象存储和容器化部署方案。 4. 编写全链路日志审计与关键异常处理逻辑,保证可追溯性。

系统架构

1. 前后端分离架构:Vue 3 负责交互层,Spring Boot 提供 RESTful API。 2. 核心交易链路采用 Redis + MySQL 双层校验保证一致性。 3. 订单超时逻辑基于 RabbitMQ TTL + DLX 异步处理,避免数据库轮询。 4. 检索链路独立到 Elasticsearch,减少主库压力并提升搜索体验。 5. 非结构化资源交给 MinIO,业务配置通过 Nacos 统一管理。

模块拆解

1. 用户与鉴权模块 - 支持注册登录、JWT 鉴权、个人信息维护、管理员角色区分。 - 密码与支付密码采用加盐哈希(BCrypt)存储。 2. 影院与排片模块 - 支持影院、影厅和排片管理,影厅座位采用 JSON 配置。 - 排片时进行时间冲突检测,避免同一影厅重叠排片。 3. 订单中心模块 - 实现锁座、下单、支付、关单、退款和订单状态流转。 - 通过分布式锁与异步消息保障高峰期交易稳定。 4. 电影检索与影评模块 - 电影支持多字段检索和关键词高亮,影评支持回复与点赞。 - 高频交互计数通过 Redis 处理并回写数据库。

关键流程

1. 高并发选座防超卖流程 - 前端提交排片 ID + 座位列表后,服务端先尝试 Redis 原子锁座。 - 锁成功后进入业务校验:场次有效性、开场时间、坏座状态。 - 执行数据库兜底校验,确认未存在已支付订单占用同座位。 - 事务内写入待支付订单并发送 TTL 消息,失败时回滚并释放锁。 - 用户支付成功后更新订单状态;若超时则由死信队列触发释放。 2. 订单超时自动关单流程 - 创建订单时向 TTL 队列发送消息并设置 15 分钟过期。 - 消息过期后路由到死信队列,由监听器拉取处理。 - 监听器检查订单是否仍为待支付,若是则标记取消并释放库存。 - 清理 Redis 锁座键,恢复座位可售状态。 3. 全文检索流程 - 电影数据写入或更新时同步到 Elasticsearch 索引。 - 用户关键词查询采用 multi-match 匹配片名、简介、演职员字段。 - 返回结果附带高亮片段,提高检索可解释性。

代码级实现要点

1. 事务 + 分布式锁的组合使用 在 createOrder 中先锁再校验再落库,异常分支主动释放 Redis 锁,避免“锁成功但事务失败”造成座位死锁。 2. TTL + DLX 处理延迟任务 将“订单超时”从业务主链路拆出,监听器只处理真正超时且未支付订单,减少接口同步阻塞和数据库扫描。 3. 检索层独立 将复杂模糊查询迁移到 ES,避免在 MySQL 上做高成本 LIKE 查询,显著改善高并发下检索时延。

核心亮点

1. Redis 原子锁座 + 数据库双重校验,防止一票多卖。 2. RabbitMQ 死信队列处理订单超时,自动释放库存。 3. Elasticsearch + IK 中文分词支持多字段搜索与高亮。 4. MinIO 管理海报资源,降低数据库存储压力。

难点与取舍

1. 高并发下座位状态、订单状态、支付状态的一致性边界处理。 2. 在保障业务正确性的同时,降低接口同步处理耗时。 3. 复杂中间件组合后,排障和可观测性要求更高。

结果与收获

1. 完成用户端与后台管理端的完整业务闭环,具备真实业务流程可演示能力。 2. 形成可容器化部署与可扩展的工程骨架,为后续微服务拆分打下基础。

后续优化方向

1. 拆分为用户/订单/内容等微服务并补齐链路追踪。 2. 引入推荐算法(协同过滤或向量召回)增强观影推荐能力。 3. 增加压测报告与容量评估,形成更完整的工程文档。

返回顶部