# java-movie **Repository Path**: walii/java-movie ## Basic Information - **Project Name**: java-movie - **Description**: 基于微服务架构的在线视频平台,采用 Spring Cloud Alibaba 生态,集成 Nacos 服务注册与配置、RabbitMQ 异步通信、Redis 缓存及 JWT 认证。系统拆分为认证、用户、视频、交互、VIP、上传及网关共七个核心服务 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-05-14 - **Last Updated**: 2026-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, SpringCloud, 消息队列 ## README # IMovie 在线观影平台 [![Java Version](https://img.shields.io/badge/Java-1.8-orange.svg)](https://www.oracle.com/java/technologies/javase-downloads.html) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.7.18-green.svg)](https://spring.io/projects/spring-boot) [![Spring Cloud](https://img.shields.io/badge/Spring%20Cloud-2021.0.8-blue.svg)](https://spring.io/projects/spring-cloud) [![Spring Cloud Alibaba](https://img.shields.io/badge/Spring%20Cloud%20Alibaba-2021.0.5.0-blue.svg)](https://spring.io/projects/spring-cloud-alibaba) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) > 基于微服务架构的在线观影平台,采用 Spring Cloud Alibaba 生态,集成 Nacos 服务注册与配置、RabbitMQ 异步通信、Redis 缓存及 JWT 认证。系统拆分为认证、用户、视频、交互、VIP、上传及网关共七个核心服务,提供用户注册登录、视频点播与播放进度追踪、实时弹幕互动、评论点赞收藏、VIP 会员体系(套餐、订单、积分、优惠券)等完整功能。各服务独立数据库,通过 API 网关统一路由和鉴权,实现高内聚低耦合,支持横向扩展。 ## 📁 项目结构 ``` java-movie/ ├── common/ # 公共模块,存放共用配置、工具类、消息队列等 ├── auth-service/ # 认证服务 - 用户注册、登录、Token 管理 ├── gateway-service/ # 网关服务 - 统一入口、路由、鉴权 ├── user-service/ # 用户服务 - 用户资料、隐私设置、通知、帮助中心 ├── video-service/ # 视频服务 - 视频管理、播放地址、播放进度、历史记录 ├── interaction-service/ # 交互服务 - 评论、回复、点赞、收藏、弹幕(WebSocket) ├── vip-service/ # VIP 服务 - 会员、套餐、订单、积分、优惠券、礼包、观影券 ├── upload-service/ # 上传服务 - 文件上传、头像上传、OSS 签名 └── README.md # 项目说明文档 ``` ## 🏗️ 技术栈 ### 核心框架 | 技术 | 版本 | 说明 | |------|------|------| | Java | 1.8 | 开发语言 | | Spring Boot | 2.7.18 | 基础框架 | | Spring Cloud | 2021.0.8 | 微服务框架 | | Spring Cloud Alibaba | 2021.0.5.0 | 阿里云生态扩展 | ### 中间件 | 技术 | 说明 | |------|------| | **Nacos** | 服务注册与配置中心 | | **RabbitMQ** | 消息队列,实现服务间异步通信 | | **Redis** | 缓存、Session 存储 | | **MySQL** | 关系型数据库 | ### 其他技术 | 技术 | 说明 | |------|------| | JWT | 用户认证 Token | | Lombok | 简化代码 | | MyBatis Plus | ORM 框架(高性能、支持 Lambda 查询、自动填充) | ## 🛤️ 服务架构 ``` ┌─────────────────┐ │ Clients │ └────────┬────────┘ │ ▼ ┌─────────────────────────┐ │ Gateway Service │ │ (Port 8000) │ │ 统一入口 · 路由 · 鉴权 │ └────────────┬────────────┘ │ ┌───────────────┬───────────────────┼───────────────────┬───────────────┐ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ Auth │ │ User │ │ Video │ │Interaction│ │ VIP │ │ Service │ │ Service │ │ Service │ │ Service │ │ Service │ │ (8001) │ │ (8002) │ │ (8003) │ │ (8004) │ │ (8005) │ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ MySQL │ │ MySQL │ │ MySQL │ │ MySQL │ │ MySQL │ │ imovie_auth│ │ imovie_user│ │ imovie_video│ │imovie_inter│ │ imovie_vip│ └───────────┘ └───────────┘ └───────────┘ └───────────┘ └───────────┘ ``` ## 📡 服务端口 | 服务 | 端口 | 职责 | |------|------|------| | gateway-service | 8000 | API 网关,统一入口、路由转发、JWT 鉴权 | | auth-service | 8001 | 用户注册、登录、Token 管理、密码修改 | | user-service | 8002 | 用户资料、隐私设置、通知管理、帮助中心(FAQ/反馈) | | video-service | 8003 | 视频列表、详情、分类、搜索、播放地址、进度追踪、观看历史 | | interaction-service | 8004 | 评论、回复、点赞(视频/评论)、收藏、弹幕(WebSocket) | | vip-service | 8005 | VIP 会员、套餐、订单、支付、积分、优惠券、礼包、观影券 | | upload-service | 8006 | 头像上传、文件上传、OSS 签名 | ## 🚀 快速开始 ### 环境要求 - JDK 1.8+ - Maven 3.6+ - MySQL 8.0+ - Redis - Nacos - RabbitMQ ### 1. 克隆项目 ```bash git clone cd java-movie ``` ### 2. 配置 Nacos 启动 Nacos Server(默认端口 8848): ```bash # Docker 启动 Nacos docker run -d --name nacos -p 8848:8848 -p 9848:9848 \ -e MODE=standalone \ nacos/nacos-server:v2.2.3 ``` 在 Nacos 中创建以下配置文件: **共享配置 (shared-config.yaml)**: ```yaml spring: datasource: username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver redis: host: localhost port: 6379 timeout: 10000ms rabbitmq: host: localhost port: 5672 username: guest password: guest virtual-host: / # MyBatis Plus 配置 mybatis-plus: configuration: map-underscore-to-camel-case: true global-config: db-config: id-type: assign_id logic-delete-field: isDeleted # JWT 配置 jwt: secret: imovie_jwt_secret_key_2026_movie_platform accessTokenExpireHours: 2 refreshTokenExpireDays: 7 ``` ### 3. 配置数据库 创建以下数据库: ```sql CREATE DATABASE imovie_auth CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE DATABASE imovie_user CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE DATABASE imovie_video CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE DATABASE imovie_interaction CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE DATABASE imovie_vip CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 各服务配置对应的数据库 URL: ```yaml # auth-service spring: datasource: url: jdbc:mysql://localhost:3306/imovie_auth?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai # user-service spring: datasource: url: jdbc:mysql://localhost:3306/imovie_user?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai # video-service spring: datasource: url: jdbc:mysql://localhost:3306/imovie_video?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai # interaction-service spring: datasource: url: jdbc:mysql://localhost:3306/imovie_interaction?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai # vip-service spring: datasource: url: jdbc:mysql://localhost:3306/imovie_vip?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai ``` ### 4. 配置 RabbitMQ ```bash # Docker 启动 RabbitMQ(使用默认账号密码) docker run -d --name rabbitmq \ -p 5672:5672 -p 15672:15672 \ rabbitmq:3.13-management ``` 默认账号:`guest / guest` ### 5. 编译项目 ```bash mvn clean install -DskipTests ``` ### 6. 启动服务 按顺序启动服务(建议使用 IDE 或部署工具): ```bash # 1. 启动 Gateway java -jar gateway-service/target/gateway-service-1.0.0.jar # 2. 启动 Auth Service java -jar auth-service/target/auth-service-1.0.0.jar # 3. 启动 User Service java -jar user-service/target/user-service-1.0.0.jar # 4. 启动 Video Service java -jar video-service/target/video-service-1.0.0.jar # 5. 启动 Interaction Service java -jar interaction-service/target/interaction-service-1.0.0.jar # 6. 启动 VIP Service java -jar vip-service/target/vip-service-1.0.0.jar # 7. 启动 Upload Service java -jar upload-service/target/upload-service-1.0.0.jar ``` ## 📚 接口文档 详细接口文档请查看 [接口文档.md](接口文档.md) ### 认证流程 ``` 1. POST /api/v1/auth/register # 注册 2. POST /api/v1/auth/login # 登录,获取 Token 3. Header 携带 Token: Authorization: Bearer {token} 4. 网关自动验证 Token,失败返回 401 ``` ### 主要功能模块 | 模块 | 功能 | |------|------| | **用户认证** | 注册、登录、Token 刷新、退出登录、修改密码 | | **用户资料** | 获取/更新资料、隐私设置(搜索/消息/历史可见性)、绑定手机/邮箱 | | **视频播放** | 视频列表、详情、分类、搜索、推荐、热门关键词、播放地址、进度追踪、观看历史 | | **互动功能** | 评论、回复、点赞(视频/评论)、收藏/取消、弹幕(WebSocket实时推送) | | **VIP 会员** | VIP 信息、套餐管理、订单创建/支付、积分查询/记录、优惠券管理、礼包领取、观影券 | | **帮助中心** | FAQ 列表、分类、用户反馈(建议/投诉/Bug) | | **通知系统** | 通知列表、未读数量、标记已读、标记全部已读 | | **文件上传** | 头像上传、OSS 签名获取 | ## 📨 消息队列 使用 RabbitMQ 实现服务间异步通信: | 队列 | 路由键 | 消费者服务 | 说明 | |------|--------|-----------|------| | `user.create.queue` | `user.create` | user-service | 用户注册后异步创建用户资料 | | `progress.update.queue` | `progress.update` | video-service | 播放进度异步更新 | | `notification.send.queue` | `notification.send` | user-service | 通知消息发送 | | `vip.expiring.queue` | `vip.expiring` | user-service | VIP 到期提醒 | ## 📁 项目模块详解 ### Common 模块 - `config/` - JWT、Redis、MyBatis Plus 配置 - `dto/response/` - 统一 API 响应格式 - `exception/` - 全局异常处理 - `mq/` - RabbitMQ 配置和消息 DTO - `handler/` - MyBatis Plus 自动填充处理器 - `util/` - 工具类(ID 生成器、Token 工具) ### Auth Service - 用户注册、登录 - Token 生成与验证 - Refresh Token 管理 - 密码加密存储 ### Gateway Service - 路由配置 - JWT 认证过滤器 - 请求日志 - 统一跨域处理 ### User Service - 用户资料 CRUD(获取/更新资料) - 隐私设置管理(允许搜索、允许私信、历史可见性) - 手机/邮箱绑定 - 通知管理(通知列表、未读计数、标记已读) - FAQ 与用户反馈(建议/投诉/Bug) - 消息消费者(处理用户创建消息、通知发送消息) ### Video Service - 视频列表与详情 - 视频分类管理 - 视频搜索与推荐 - 热门搜索关键词 - 播放地址获取(多清晰度支持) - 播放进度追踪 - 观看历史管理(查询/删除/清空) - 消息消费者(处理播放进度更新消息) ### Interaction Service - 评论管理(评论列表、创建评论、回复评论) - 点赞管理(视频点赞、评论点赞) - 收藏管理(收藏/取消、收藏列表) - 弹幕管理(WebSocket 实时推送、弹幕列表) ### VIP Service - VIP 会员信息查询 - VIP 套餐管理(套餐列表、购买套餐) - 订单管理(创建订单、支付、订单列表) - 积分系统(积分查询、积分记录) - 优惠券管理(优惠券列表、发放优惠券) - 礼包管理(礼包列表、领取礼包) - 观影券管理(观影券列表、使用观影券) ### Upload Service - 头像上传(本地存储) - OSS 签名获取(用于客户端直传) ## 🔧 开发指南 ### 添加新的微服务 1. 在根目录创建模块目录 2. 创建 `pom.xml`,继承父项目 3. 添加 Spring Boot 主类 4. 在父 `pom.xml` 的 `` 中添加 5. 配置 Nacos 注册与配置 ### 添加新的接口 1. 在对应服务的 `controller` 包下创建 Controller 2. 定义 `@RequestMapping` 路由 3. 在 `service` 包下实现业务逻辑 4. 添加对应的 DTO 类 ### 添加消息队列 1. 在 `RabbitMQConfig` 中定义队列和绑定 2. 创建消息 DTO 类 3. 使用 `MessageProducer` 发送消息 4. 创建 `@RabbitListener` 消费者 ## 📝 配置说明 ### 网关路由配置 在 `gateway-service/src/main/resources/application.yml` 中配置: ```yaml spring: cloud: gateway: routes: - id: auth-service uri: lb://auth-service predicates: - Path=/api/v1/auth/** filters: - StripPrefix=2 ``` ### Nacos 配置中心 各服务从 Nacos 读取配置,支持: - 共享配置(所有服务通用) - 服务独立配置 - 配置热更新 ## 🐛 调试技巧 ### 查看服务注册状态 访问 Nacos 控制台:http://localhost:8848/nacos 查看「服务管理」→「服务列表」 ### 查看 RabbitMQ 访问 RabbitMQ 管理界面:http://localhost:15672 默认账号:`guest / guest` ### 开启网关 Debug 日志 ```yaml logging: level: org.springframework.cloud.gateway: DEBUG ``` ## 📄 许可证 本项目基于 MIT 许可证开源。 ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! ## 📧 联系方式 如有问题,请联系开发团队。