# tanhua **Repository Path**: Dlow71/tanhua ## Basic Information - **Project Name**: tanhua - **Description**: 微服务架构社交平台,集成智能推荐、即时通讯、LBS定位,采用MongoDB+MySQL混合存储。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2023-09-19 - **Last Updated**: 2025-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: Dubbo, MongoDB ## README # DLove
一个基于微服务架构的现代化社交婚恋平台,提供智能推荐、即时通讯、动态分享等功能 [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.3.9-brightgreen.svg)](https://spring.io/projects/spring-boot) [![Spring Cloud](https://img.shields.io/badge/Spring%20Cloud-Hoxton.SR10-blue.svg)](https://spring.io/projects/spring-cloud) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
## 📖 项目简介 DLove 是一款基于微服务架构的现代化社交婚恋平台,致力于为单身用户提供智能、便捷的交友体验。项目采用前后端分离架构,后端使用 Spring Cloud Alibaba 微服务技术栈,集成了多种第三方服务,实现了智能推荐、即时通讯、动态分享、小视频等核心功能。 ## ✨ 核心功能 ### 🎯 用户模块 - **手机登录注册**:基于阿里云短信服务的验证码登录 - **用户信息管理**:头像上传、个人资料完善 - **人脸识别**:集成百度AI实现头像人脸检测 ### 💝 交友推荐 - **今日佳人**:基于推荐算法展示最佳匹配用户 - **推荐列表**:分页展示推荐好友,支持性别、年龄筛选 - **匹配卡片**:类似Tinder的左滑右滑交友方式 - **陌生人问题**:破冰功能,回复问题后可添加好友 - **搜附近**:基于地理位置的附近用户搜索(LBS) ### 📱 社交动态 - **动态发布**:支持图文、视频动态发布 - **内容审核**:集成阿里云内容安全,自动审核违规内容 - **好友动态**:查看好友发布的动态 - **推荐动态**:基于用户兴趣推荐动态内容 - **互动功能**:点赞、评论、喜欢等社交互动 - **访客记录**:记录谁看过我的主页 ### 🎬 小视频 - **视频发布**:支持小视频上传和发布 - **视频列表**:瀑布流展示小视频内容 - **关注功能**:关注/取消关注视频作者 ### 💬 即时通讯 - **环信IM集成**:实现实时聊天功能 - **好友管理**:添加好友、好友列表查询 - **消息推送**:系统消息推送 ### 🛡️ 系统功能 - **JWT认证**:基于Token的用户认证机制 - **网关鉴权**:统一的API网关权限校验 - **统一异常处理**:优雅的异常处理机制 - **用户冻结**:管理员可冻结违规用户 ## 🏗️ 技术架构 ### 架构设计 ``` ┌─────────────┐ │ Gateway │ Spring Cloud Gateway 网关层 └──────┬──────┘ │ ├─────────────────────────────┬─────────────────────┐ │ │ │ ┌──────▼──────┐ ┌────────▼────────┐ ┌───────▼────────┐ │ App Server │ │ Recommend Server│ │ Admin Server │ │ 应用服务 │ │ 推荐服务 │ │ 管理后台 │ └──────┬──────┘ └─────────────────┘ └────────────────┘ │ │ Dubbo RPC │ ┌──────▼──────────────────────────────┐ │ Dubbo Services │ │ ┌─────────┐ ┌──────────┐ │ │ │ DB API │ │ Mongo API│ │ │ └─────────┘ └──────────┘ │ └─────────────────────────────────────┘ │ │ │ │ ┌──────▼──────┐ ┌──────▼──────┐ │ MySQL │ │ MongoDB │ └─────────────┘ └─────────────┘ ``` ### 技术栈 #### 后端核心框架 - **Spring Boot 2.3.9**:应用开发框架 - **Spring Cloud Hoxton.SR10**:微服务框架 - **Spring Cloud Alibaba 2.2.5**:微服务组件 - **Apache Dubbo**:高性能RPC框架 #### 微服务组件 - **Nacos**:服务注册与配置中心 - **Spring Cloud Gateway**:API网关 - **RabbitMQ**:消息队列,实现异步处理和解耦 #### 数据存储 - **MySQL 5.x**:关系型数据库,存储用户基础数据 - **MongoDB 4.0.5**:NoSQL数据库,存储社交数据(动态、评论等) - **Redis**:缓存中间件,存储验证码、Token等 - **FastDFS**:分布式文件系统 #### 持久层 - **MyBatis-Plus 3.4.1**:持久层框架,简化CRUD操作 #### 第三方服务集成 - **阿里云OSS**:对象存储服务,存储图片视频 - **阿里云短信服务**:验证码发送 - **阿里云内容安全**:违规内容审核 - **百度AI开放平台**:人脸识别 - **环信IM**:即时通讯服务 #### 工具库 - **Lombok**:简化Java代码 - **Hutool 5.4.3**:Java工具类库 - **FastJSON 1.2.8**:JSON处理 - **JWT**:Token生成与验证 ## 📦 项目结构 ``` tanhua ├── tanhua-app-server # 应用服务模块(对外提供REST API) │ ├── controller # 控制器层 │ ├── service # 业务逻辑层 │ ├── interceptor # 拦截器(Token验证、用户信息存储) │ └── exception # 异常处理 ├── tanhua-dubbo # Dubbo服务提供者模块 │ ├── tanhua-dubbo-interface # Dubbo接口定义 │ ├── tanhua-dubbo-db # MySQL数据库服务实现 │ └── tanhua-dubbo-mongo # MongoDB数据库服务实现 ├── tanhua-gateway # 网关模块(统一入口、鉴权) │ └── filters # 网关过滤器 ├── tanhua-model # 数据模型模块 │ ├── domain # MySQL实体类 │ ├── mongo # MongoDB实体类 │ ├── vo # 视图对象 │ ├── dto # 数据传输对象 │ └── enums # 枚举类 ├── tanhua-autoconfig # 自动配置模块 │ ├── template # 第三方服务模板类 │ └── properties # 配置属性类 ├── tanhua-commons # 公共工具模块 │ └── utils # 工具类(JWT、常量等) └── tanhua-recommend # 推荐服务模块 └── listener # 消息监听器(用户行为分析) ``` ## 🚀 核心技术亮点 ### 1. 微服务架构设计 - 采用Spring Cloud Alibaba微服务架构,服务独立部署、独立扩展 - Nacos作为服务注册与配置中心,实现配置统一管理 - Dubbo实现服务间高性能RPC调用 - Spring Cloud Gateway统一网关,实现路由转发和权限校验 ### 2. 智能推荐系统 - 基于用户行为评分的推荐算法 - 通过RabbitMQ异步收集用户行为数据(浏览、点赞、评论等) - 实时计算用户互动评分,动态调整推荐权重 - 支持动态推荐和视频推荐 **评分规则**: ```java 发布动态:基础5分 + 图片数 + 文本长度分 浏览动态:1分 点赞:5分 喜欢:8分 评论:10分 取消点赞:-5分 取消喜欢:-8分 ``` ### 3. 异步消息处理 - RabbitMQ实现消息的异步处理和服务解耦 - 用户行为日志异步记录,不影响主业务流程 - 动态审核异步处理,提升用户体验 - 推荐评分异步计算,实时更新推荐结果 ### 4. 数据存储优化 - **读写分离**:MySQL存储用户基础数据,MongoDB存储高并发社交数据 - **Redis缓存**:验证码、Token等高频访问数据缓存 - **MongoDB优势**: - 灵活的文档结构,适合社交数据的复杂关系 - 高并发读写性能 - 支持地理位置查询(附近的人功能) ### 5. 统一认证鉴权 - JWT实现无状态Token认证 - Gateway网关统一鉴权,避免每个服务重复校验 - ThreadLocal存储用户信息,避免参数传递 - 拦截器自动解析Token并注入用户信息 ### 6. 第三方服务集成 - **阿里云OSS**:分布式存储图片视频,CDN加速 - **百度AI人脸识别**:头像质量检测,提升用户信息真实性 - **阿里云内容安全**:自动识别违规内容,降低运营风险 - **环信IM**:成熟的即时通讯解决方案,稳定可靠 ### 7. 异常处理机制 - 统一异常处理器,优雅处理各类异常 - 自定义业务异常类,清晰的错误码和错误信息 - 避免敏感信息泄露,提供友好的错误提示 ### 8. LBS地理位置服务 - MongoDB GeoJSON支持,实现附近的人功能 - 基于经纬度的距离计算 - 支持按距离和性别筛选附近用户 ## 🔧 环境要求 - **JDK**: 1.8+ - **Maven**: 3.6+ - **MySQL**: 5.7+ - **MongoDB**: 4.0+ - **Redis**: 5.0+ - **RabbitMQ**: 3.8+ - **Nacos**: 1.4+ - **FastDFS**: 5.0+ ## 📝 快速开始 ### 1. 克隆项目 ```bash git clone https://gitee.com/Dlow71/tanhua ``` ### 2. 初始化数据库 #### MySQL数据库 项目使用MySQL存储用户基础数据,执行以下步骤初始化: ```bash # 方式一:使用MySQL命令行导入 mysql -u root -p < docs/sql/tanhua.sql # 方式二:在MySQL客户端中导入 mysql -u root -p source /path/to/tanhua/docs/sql/tanhua.sql ``` **包含的数据表**: - `tb_user` - 用户表 - `tb_user_info` - 用户信息表 - `tb_question` - 陌生人问题表 - `tb_settings` - 用户设置表 - `tb_black_list` - 黑名单表 - `tb_admin` - 管理员表 - `tb_log` - 日志表 - `tb_analysis` - 数据分析表 **默认账号**: - 管理员:`admin` / `admin123` - 测试用户:`13800138000` ~ `13800138004` / `123456` #### MongoDB数据库 项目使用MongoDB存储社交数据(动态、评论、推荐等),执行以下步骤初始化: ```bash # 方式一:使用mongo shell执行脚本 mongo tanhua < docs/sql/mongodb_init.js # 方式二:在mongo shell中手动执行 mongo use tanhua # 然后复制粘贴 docs/sql/mongodb_init.js 中的命令 ``` **包含的集合**: - `movement` - 动态表 - `comment` - 评论互动表 - `video` - 小视频表 - `user_location` - 用户位置表(支持GeoJSON地理查询) - `friend` - 好友关系表 - `focus_user` - 关注用户表 - `user_like` - 用户喜欢表 - `visitors` - 访客表 - `movement_timeline` - 动态时间线表 - `recommend_user` - 推荐用户表 - `recomment_movement_score` - 动态评分表 - `recomment_video_score` - 视频评分表 - `sequence` - 序列表(用于自增ID) 详细的MongoDB集合说明请查看:[MongoDB初始化文档](docs/sql/mongodb_init.md) #### 验证数据库初始化 执行验证脚本检查数据库是否正确初始化: ```bash # 运行验证脚本 ./docs/sql/check_database.sh # 或者手动验证 # MySQL验证 mysql -u root -p -e "USE tanhua; SHOW TABLES;" # MongoDB验证 mongo tanhua --eval "db.getCollectionNames()" ``` ### 3. 修改配置文件 修改各模块的 `application.yml` 配置文件: - **数据库配置**:MySQL连接信息 - **MongoDB配置**:MongoDB连接URI - **Redis配置**:Redis地址和端口 - **Nacos配置**:Nacos服务地址 - **RabbitMQ配置**:RabbitMQ连接信息 - **第三方服务配置**: - 阿里云OSS(AccessKey、SecretKey、Endpoint) - 阿里云短信(AccessKey、SecretKey、签名、模板) - 百度AI(AppId、ApiKey、SecretKey) - 环信IM(AppKey、ClientId、ClientSecret) ### 4. 启动服务 按以下顺序启动各个服务: ```bash # 1. 启动基础服务 # - Nacos # - MySQL # - MongoDB # - Redis # - RabbitMQ # - FastDFS # 2. 启动Dubbo服务提供者 cd tanhua-dubbo/tanhua-dubbo-db mvn spring-boot:run cd tanhua-dubbo/tanhua-dubbo-mongo mvn spring-boot:run # 3. 启动推荐服务 cd tanhua-recommend mvn spring-boot:run # 4. 启动应用服务 cd tanhua-app-server mvn spring-boot:run # 5. 启动网关服务 cd tanhua-gateway mvn spring-boot:run ``` ### 5. 访问应用 - **应用服务**: http://localhost:18080 - **网关服务**: http://localhost:8888(具体端口见配置) - **Nacos控制台**: http://localhost:8848/nacos ## 📚 API文档 ### 用户模块 #### 发送验证码 ``` POST /user/login Content-Type: application/json { "phone": "13800138000" } ``` #### 登录验证 ``` POST /user/loginVerification Content-Type: application/json { "phone": "13800138000", "verificationCode": "123456" } ``` ### 交友推荐模块 #### 今日佳人 ``` GET /tanhua/todayBest Authorization: Bearer {token} ``` #### 推荐列表 ``` GET /tanhua/recommendation?page=1&pagesize=10&gender=女&age=20 Authorization: Bearer {token} ``` #### 匹配卡片 ``` GET /tanhua/cards Authorization: Bearer {token} ``` #### 喜欢 ``` GET /tanhua/{id}/love Authorization: Bearer {token} ``` #### 搜附近 ``` GET /tanhua/search?gender=女&distance=2000 Authorization: Bearer {token} ``` ### 动态模块 #### 发布动态 ``` POST /movements Content-Type: multipart/form-data Authorization: Bearer {token} textContent: 动态内容 latitude: 纬度 longitude: 经度 imageContent: [文件1, 文件2] ``` #### 推荐动态 ``` GET /movements/recommend?page=1&pagesize=10 Authorization: Bearer {token} ``` #### 点赞 ``` GET /movements/{id}/like Authorization: Bearer {token} ``` ### 小视频模块 #### 发布视频 ``` POST /smallVideos Content-Type: multipart/form-data Authorization: Bearer {token} videoTanhuaNail: 封面图 videoFile: 视频文件 ``` #### 视频列表 ``` GET /smallVideos?page=1&pagesize=10 Authorization: Bearer {token} ``` 更多API请参考在线文档或导入Postman集合。 ## 🎯 后续规划 - [ ] 引入Elasticsearch实现全文搜索 - [ ] 集成Spark实现更复杂的推荐算法 - [ ] 增加实时音视频通话功能 - [ ] 优化性能,引入缓存预热、限流等机制 - [ ] 完善监控体系,集成Skywalking或Prometheus - [ ] 增加单元测试和集成测试 - [ ] Docker容器化部署 - [ ] K8S编排支持 ## 📄 许可证 本项目采用 [Apache License 2.0](LICENSE) 开源协议 ## 🤝 贡献指南 欢迎提交Issue和Pull Request! 1. Fork本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 提交Pull Request ## 🙏 致谢 感谢以下开源项目和服务提供商: - Spring Boot & Spring Cloud - Apache Dubbo - Alibaba Nacos - 阿里云服务 - 百度AI开放平台 - 环信即时通讯云 ---
⭐ 如果这个项目对你有帮助,请给一个Star支持一下! Made with ❤️ by DLove Team