# Simple Forum Distributed Project **Repository Path**: minglingee/simple-forum-distributed-project ## Basic Information - **Project Name**: Simple Forum Distributed Project - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-07 - **Last Updated**: 2025-12-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简易论坛分布式数据库项目 基于 Spring Boot + MongoDB 副本集的简易论坛系统,实现分布式数据库的读写分离和高可用特性。 ## 技术栈 - **后端**:Spring Boot 3.2 + Java 17 - **数据库**:MongoDB 副本集(3节点) - **前端**:Vue 3 + Element Plus - **部署**:Docker Compose ## 核心功能 - 用户注册/登录(BCrypt 密码加密) - 发帖、查看帖子列表 - 帖子详情、点赞 - 评论功能 - 搜索帖子 ## 项目亮点 1. **分布式数据库**:3 节点 MongoDB 副本集 2. **读写分离**:读操作自动分发到从节点,提升性能 3. **高可用性**:主节点宕机后自动故障转移 4. **现代化 UI**:Vue 3 + Element Plus,美观易用 5. **容器化部署**:Docker Compose 一键启动 ## 快速开始 ### 1. 启动 MongoDB 副本集 ```bash # 启动容器 # 注意先定位到docker-compose.ym 文件所在的目录,同时路径上不能有中文名 docker-compose up -d # 进入 mongo1 容器初始化副本集 docker exec -it mongo1 mongosh # 在 mongosh 中执行 rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "mongo1:27017" }, { _id: 1, host: "mongo2:27017" }, { _id: 2, host: "mongo3:27017" } ] }) # 验证状态 rs.status() ``` ### 2. 配置 hosts 文件(本地运行必需) **Windows 系统**:以管理员身份编辑 `C:\Windows\System32\drivers\etc\hosts`,添加: ``` 127.0.0.1 mongo1 127.0.0.1 mongo2 127.0.0.1 mongo3 ``` **Linux/Mac 系统**:编辑 `/etc/hosts`,添加相同内容。 ### 3. 启动后端服务 ```bash cd backend mvn spring-boot:run ``` 后端服务将在 `http://localhost:8080` 启动。 ### 4. 访问前端 使用浏览器打开 `frontend/index.html`,或使用本地服务器: ```bash cd frontend python -m http.server 8000 ``` 访问 `http://localhost:8000` ## API 接口 ### 认证接口 - `POST /api/auth/register` - 用户注册 - `POST /api/auth/login` - 用户登录 ### 帖子接口 - `GET /api/posts` - 获取帖子列表 - `POST /api/posts` - 创建帖子 - `GET /api/posts/{id}` - 获取帖子详情 - `POST /api/posts/{id}/like` - 点赞 - `GET /api/posts/search?q=` - 搜索帖子 ### 评论接口 - `POST /api/comments` - 添加评论 - `GET /api/comments/{postId}` - 获取评论列表 ## 项目结构 ``` ├── docker-compose.yml # MongoDB 副本集配置 ├── backend/ # Spring Boot 后端 │ ├── src/main/java/com/forum/ │ │ ├── model/ # 数据模型 │ │ ├── repository/ # 数据访问层 │ │ ├── service/ # 业务逻辑层 │ │ ├── controller/ # API 接口层 │ │ └── ForumApplication.java │ ├── src/main/resources/ │ │ └── application.yml │ └── pom.xml ├── frontend/ # 前端页面 │ ├── index.html # 首页 │ ├── login.html # 登录/注册 │ └── post.html # 帖子详情 └── docxs/ # 项目文档 └── 项目实施计划.md ``` ## 分布式特性验证 ### 读写分离测试 配置中使用 `readPreference=secondaryPreferred`,读操作优先从从节点读取。 ### 高可用测试 ```bash # 1. 查看当前主节点 docker exec -it mongo1 mongosh --eval "rs.status()" # 2. 停止主节点(假设是 mongo1) docker stop mongo1 # 3. 等待 10-15 秒,副本集自动选举新主节点 # 4. 继续访问论坛,功能正常 # 5. 重启 mongo1 docker start mongo1 ``` ## 开发说明 ### 后端开发 - Java 17+ - Maven 3.6+ - Spring Boot 3.2 ### 前端开发 - Vue 3(CDN 引入) - Element Plus(CDN 引入) - 无需构建工具 ## 注意事项 1. 确保端口 27017-27019、8080 未被占用 2. MongoDB 副本集至少需要 4GB 内存 3. 生产环境需配置 MongoDB 认证 ## License MIT