# mi_project **Repository Path**: zhu_yateng/mi_project ## Basic Information - **Project Name**: mi_project - **Description**: 使用springcloud+netty来构建千万级别架构的IM系统后端服务 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-07 - **Last Updated**: 2025-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mi_project #### 介绍 使用springcloud+netty来构建千万级别架构的IM系统后端服务 #### 技术特点: 1、Netty 服务为用户提供文字/图片/表情/语音/视频内容收发,Netty 中的文件聊天资源存储至MinIO进行分布式保存,对用户黑名单进行拦截,驳回聊天消息,Netty 通过RabbitMQ异步解耦使得SpringCloud监听并进行离线消息存储或动态清清除机端口,Netty 结合RabbitMQ进行消息扩散,实现集群消息分发,Netty 结合Zookeeper实现分布式锁控制同一节点资源的并发读写 2、Netty 可以按需单机启动或者多节点集群化启动,集群节点结合Zookeeper实现注册与发现,根据心跳机制,自动断开不活跃用户设备, Netty 通过Jedis客户端根据算法计算并且动态分配Netty服务集群端口,Netty 与SpringCloud通过OkHttp进行同步远程调用,Zookeeper节点封装同时在线人数,进行累加&累减并且断连自动清除,微服务端通过手写负载均衡算法,按照最少人数节点提供给用户设备连接 3、微服务通过对Zookeeper监听,实现自动清除无效队列以及无效端口,不同手机设备可以获得坐标并且存储至Elasticsearch中,通过ES的geo坐标检索能力可以实现海量数据检索以及漂流瓶功能,微服务各个节点可以水平扩展为集群节点,内部通过OpenFeign进行服务间数据通信 #### 软件架构: 架构图 ┌─────────────────────────────────────────────────────────────────┐ │ 客户端层 │ │ (Web/移动端App/小程序) │ └───────────────────┬─────────────────────────────────────────────┘ │ ┌───────────────────▼─────────────────────────────────────────────┐ │ 接入层 │ │ ┌───────────────┐ ┌─────────────────────────────────────┐ │ │ │ Nginx │ │ 自定义负载均衡算法 │ │ │ │ 反向代理 │◄───►│ (连接最少人数的Netty节点) │ │ │ └───────────────┘ └─────────────────────────────────────┘ │ └───────────────────┬─────────────────────────────────────────────┘ │ ┌───────────────────▼─────────────────────────────────────────────┐ │ Netty通信层 (集群) │ │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ │ │ Netty节点1 │ │ Netty节点2 │ │ Netty节点N │ │ │ │ (WebSocket) │ │ (WebSocket) │ │ (WebSocket) │ │ │ └───────┬───────┘ └───────┬───────┘ └───────┬───────┘ │ │ │ │ │ │ │ ┌───────▼───────┐ ┌───────▼───────┐ ┌───────▼───────┐ │ │ │ 心跳机制 │ │ 心跳机制 │ │ 心跳机制 │ │ │ │ 消息拦截 │ │ 消息拦截 │ │ 消息拦截 │ │ │ │ 黑名单过滤 │ │ 黑名单过滤 │ │ 黑名单过滤 │ │ │ └───────┬───────┘ └───────┬───────┘ └───────┬───────┘ │ └───────────┼────────────────────┼────────────────────┼────────────┘ │ │ │ ┌───────────▼────────────────────▼────────────────────▼────────────┐ │ 中间件层 │ │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ │ │ Zookeeper │ │ RabbitMQ │ │ Redis │ │ │ │ 服务注册发现 │ │ 消息队列/广播 │ │ 缓存/端口分配 │ │ │ │ 分布式锁 │ │ 离线消息存储 │ │ 黑名单存储 │ │ │ │ 在线人数统计 │ │ 消息扩散 │ │ 限流 │ │ │ └───────────────┘ └───────────────┘ └───────────────┘ │ └───────────┬────────────────────┬────────────────────┬────────────┘ │ │ │ ┌───────────▼────────────────────▼────────────────────▼────────────┐ │ 微服务层 │ │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ │ │ 用户服务 │ │ 消息服务 │ │ 文件服务 │ │ │ └───────────────┘ └───────────────┘ └───────────────┘ │ │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ │ │ 群组服务 │ │ 搜索服务 │ │ 网关服务 │ │ │ └───────────────┘ └───────────────┘ └───────────────┘ │ └───────────┬────────────────────┬────────────────────┬────────────┘ │ │ │ ┌───────────▼────────────────────▼────────────────────▼────────────┐ │ 存储层 │ │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ │ │ MySQL │ │ MinIO │ │ Elasticsearch │ │ │ │ 关系型数据库 │ │ 对象存储 │ │ 搜索引擎 │ │ │ │ 业务数据 │ │ 图片/语音/视频│ │ 地理位置/检索 │ │ │ └───────────────┘ └───────────────┘ └───────────────┘ │ └─────────────────────────────────────────────────────────────────┘ #### 功能点介绍: 1. Netty集群化 : 通过Zookeeper实现服务注册与发现,支持动态扩缩容 2. 消息扩散机制 : 使用RabbitMQ实现Netty节点间的消息广播和离线消息存储 3. 分布式锁 : 利用Zookeeper实现资源的并发访问控制 4. 动态端口分配 : 基于Redis实现Netty服务的动态端口分配 5. 自定义负载均衡 : 按照节点在线人数进行智能负载均衡 6. 心跳机制 : Netty内置的IdleStateHandler实现连接保活 7. 地理位置服务 : Elasticsearch的GEO功能支持附近的人等地理检索 8. 分布式存储 : MinIO存储聊天文件,支持海量数据存储 9. 黑名单过滤 : Redis缓存黑名单,实现高效的消息拦截 通过分布式集群、异步通信、缓存优化等技术,确保了系统的高可用、高性能和可扩展性。