# microservice-demo-java **Repository Path**: endlessPluto/microservice-demo-java ## Basic Information - **Project Name**: microservice-demo-java - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-02 - **Last Updated**: 2026-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 面试资料系统 - 微服务架构 ## 项目概述 基于 Spring Cloud 微服务架构的面试资料管理系统,集成 Nacos 服务注册与发现、自定义令牌桶限流、状态机熔断器、动态路由网关,提供后台管理完整功能。 ## 服务架构 ``` ┌──────────────┐ │ 用户前台 │ :3000 (Vue3) └──────┬───────┘ ┌──────┴───────┐ │ 管理后台 │ :3001 (Vue3) └──────┬───────┘ │ 直连代理 ┌─────────────────┼─────────────────────┐ ┌────▼────┐ ┌────▼────┐ ┌─────▼──────┐ │ 面试服务 │ │ 爬虫服务 │ │ 管理服务 │ │ :8084 │ │ :9006 │ │ :9005 │ └────┬────┘ └────┬────┘ └─────┬──────┘ │ │ │ └──────────────────┼─────────────────────┘ │ ┌─────────────────┼──────────────────┐ ┌────▼────┐ ┌─────▼──────┐ ┌─────▼─────┐ │ MySQL │ │ Nacos │ │ Redis │ │ :3307 │ │ :8848 │ │ :6379 │ └─────────┘ └────────────┘ └───────────┘ ``` ## 服务列表 | 服务 | 端口 | 说明 | |------|------|------| | interview-service | 8084 | 面试题目CRUD、分类管理、搜索统计 | | crawler-service | 9006 | 爬虫管理:数据源配置、爬取采集、导入题库 | | admin-service | 9005 | 后台管理:日志、角色、权限、菜单、运行日志 | | api-gateway | 9001 | Spring Cloud Gateway 统一入口(可选) | | nacos | 8848 | 服务注册与发现中心 | ## 数据库 数据库:`interview_system` @ `localhost:3307` (Docker `interview-mysql`) | 前缀 | 表名 | 用途 | |------|------|------| | `biz_` | biz_question | 面试题目 | | | biz_category | 题目分类 | | | biz_user | 用户信息 | | | biz_user_collect | 用户收藏 | | | biz_user_study | 用户学习记录 | | `sys_` | sys_role | 系统角色 | | | sys_permission | 权限配置(菜单+按钮) | | | sys_log | 系统日志(登录+操作) | | | sys_crawler_source | 爬虫数据源 | | | sys_crawler_result | 爬取结果 | ## 核心特性 ### 1. Nacos 服务注册与发现 - 所有服务注册到 Nacos (localhost:8848) - 支持服务健康检查、动态上下线 - 管理后台:http://localhost:8848/nacos (nacos/nacos) ### 2. 令牌桶限流 (Token Bucket) - 实现:`common` 模块 `TokenBucketRateLimiter` - 注解:`@RateLimit(key, capacity, rate)` - 示例:`@RateLimit(key="questionList", capacity=100, rate=50)` ### 3. 熔断器 (Circuit Breaker) - 实现:状态机模式 CLOSED → OPEN → HALF_OPEN - 注解:`@CircuitBreakerProtect(failureThreshold, timeout, fallbackMethod)` - 支持自定义降级方法 ### 4. 后台管理系统 - 系统概览:统计卡片、图表、最新题目 - 题目管理:CRUD、Markdown编辑、分类筛选 - 分类管理:树形分类 - 用户管理:用户列表 - 爬虫管理:数据源配置、启动/停止爬虫、去重、导入题库 - 日志管理:登录日志 + 操作日志 - 角色管理:角色CRUD + 权限分配 - 权限管理:树形权限(菜单/按钮/接口三级粒度) - 菜单管理:动态路由配置 - 运行日志:实时查看服务日志、搜索、自动刷新 ## 快速启动 ### 前置条件 - JDK 8、Maven 3.6+、Node.js 18+ - Docker 运行 MySQL (`interview-mysql` 容器, 端口3307) - Docker 运行 Nacos (`docker run -d --name nacos -p 8848:8848 nacos/nacos-server:v2.2.3`) ### 编译 ```bash cd /home/dao/桌面/microservice-demo-java mvn clean install -pl common -DskipTests mvn clean install -DskipTests ``` ### 启动后端 ```bash # 终端1: 面试服务 cd interview-service && mvn spring-boot:run # 终端2: 爬虫服务 cd crawler-service && mvn spring-boot:run # 终端3: 管理服务 cd admin-service && mvn spring-boot:run ``` ### 启动前端 ```bash # 管理后台 cd web-admin && npm install && npm run dev # 访问 http://localhost:3001 ``` 默认账号:admin / admin123 ## API 接口 ### 面试服务 (8084) ``` GET /interview/question/list?page=1&size=10&keyword=&categoryId=&difficulty= GET /interview/question/{id} POST /interview/question PUT /interview/question/{id} DELETE /interview/question/{id} GET /interview/question/stats GET /interview/category/list ``` ### 爬虫服务 (9006) ``` GET /crawler/stats # 统计数据 GET /crawler/sources # 数据源列表 POST /crawler/sources # 添加数据源 PUT /crawler/sources/{id} # 更新数据源 DELETE /crawler/sources/{id} # 删除数据源 POST /crawler/start/{sourceId} # 启动爬虫 POST /crawler/stop/{sourceId} # 停止爬虫 GET /crawler/results?page=&size=&title=&sourceId=&imported= # 爬取结果 POST /crawler/import/{resultId} # 导入单个 POST /crawler/import/batch # 批量导入 ``` ### 管理服务 (9005) ``` GET /admin/dashboard # 仪表盘 GET /admin/logs/login?page=&size=&username=&status= # 登录日志 GET /admin/logs/operation?page=&size=&username=&opType= # 操作日志 DELETE /admin/logs/batch # 批量删除日志 GET /admin/roles # 角色列表 POST /admin/roles # 新增角色 PUT /admin/roles/{id} # 更新角色 DELETE /admin/roles/{id} # 删除角色 GET /admin/permissions/tree # 权限树 GET /admin/menus/tree # 菜单树 GET /admin/menus/routes # 动态路由 GET /admin/logview/files # 日志文件列表 GET /admin/logview/tail?file=&lines=200 # 查看日志 GET /admin/logview/search?keyword= # 搜索日志 ``` ## 限流测试 ```bash # 连续请求触发令牌桶限流 for i in $(seq 1 20); do curl -s -o /dev/null -w "%{http_code} " http://localhost:8084/interview/question/list; done ``` ## 熔断测试 ```bash # 连续请求触发熔断 for i in $(seq 1 10); do curl -s http://localhost:8084/interview/question/stats; echo; sleep 1; done ``` ## 技术栈 - Java 8, Spring Boot 2.7.18, Spring Cloud 2021.0.8 - Spring Cloud Alibaba 2021.0.5.0 (Nacos Discovery) - MyBatis-Plus 3.5.3.1, MySQL 8.0 - Vue 3, Vite 4, Element Plus, ECharts - 自定义令牌桶限流 + 状态机熔断器 ## 项目结构 ``` microservice-demo-java/ ├── common/ # 公共模块(限流/熔断/统一响应) ├── api-gateway/ # Spring Cloud Gateway ├── interview-service/ # 面试资料服务 ├── crawler-service/ # 爬虫管理服务 ├── admin-service/ # 管理后台服务 ├── web-admin/ # Vue3 管理前端 ├── web-frontend/ # Vue3 用户前端 ├── logs/ # 运行日志 ├── init-db.sql # 数据库初始化脚本 ├── start-services.sh # 一键启动脚本 └── pom.xml ``` # microservice-demo-java