🚀🚀🚀嗨,一起来开发 开源IM系统呀!

🚀 开源分布式IM系统:致力于打造一款现代化、分布式、高并发、高可用的即时通讯解决方案!

前言

大家好,我是蝎子莱莱爱打怪 ,今天和大家分享一个我个人历时多年设计和开发的开源项目------xzll-im分布式即时通讯系统

(本文是我对项目中 README 的摘抄,发表此文目的为了让更多人看到并参与到此项目中)

与IM结缘是在2022年,因为此类系统有足够大的挑战性,所以我对此如痴如醉。之前做过架构以及细节方面的设计,但是一直没有落地。不落地的设计不是好设计,所以有了这个项目。

📱 项目仓库

端侧 技术栈 GitHub地址 描述
🖥️ 服务端 Java + Spring Cloud + Dubbo + Netty xzll-im-server 分布式IM后端服务
📱 客户端 Flutter + Dart xzll-im-flutter-client 跨平台移动客户端

🎯 项目目标

想要设计一个好的IM系统,是很有难度的,本项目将尽可能达到以下几点:

  • 高并发: 支持万级并发用户
  • 高可用: 99.9% 系统可用性
  • 高性能: 毫秒级消息延迟
  • 稳定可靠: 完善的容错和恢复机制
  • 灵活好扩展: 微服务架构,水平扩展支持
  • 可观测: 完整的监控和链路追踪体系

🏗️ 系统架构设计

架构总览

整个系统采用微服务架构,主要包含以下核心服务:

  • im-gateway: 统一API网关,负责路由分发、限流熔断
  • im-auth: 认证服务,处理用户登录、JWT令牌管理
  • im-connect: 长连接服务,基于Netty的WebSocket通信
  • im-business: 核心业务服务,消息处理和业务逻辑
  • im-console: 管理后台服务,提供运营管理接口
  • im-data-sync: 数据同步服务,负责HBase到ES的数据同步

物理部署拓扑

节点配置表

节点IP 节点角色 部署组件 端口 用途
192.168.1.101 负载均衡+代理 Nginx, FRP Client, IM服务(规划) 80/443 流量入口、内网穿透
192.168.1.102 监控节点 Prometheus, Grafana, Skywalking, IM服务(规划) 9090/3000/8080 系统监控、链路追踪
192.168.1.150 应用服务 IM微服务群、Nacos、Jenkins、Docker 8081-8085/10001/8848 核心业务逻辑
192.168.1.130 集群主节点 ZK Master, RMQ Master, HBase Master, HDFS NameNode, MySQL Master 2181/9876/3306 集群协调、数据管理、主数据库
192.168.1.131 集群从节点1 ZK Follower, RMQ Follower, HBase RegionServer, Redis, MySQL Slave 2181/9876/6379/3306 数据存储、缓存、从数据库
192.168.1.132 集群从节点2 ZK Follower, RMQ Follower, HBase RegionServer, ES 2181/9876/9200 数据存储、搜索

🔄 核心业务流程

用户登录流程

sequenceDiagram participant C as 客户端 participant G as Gateway participant A as Auth服务 participant M as MySQL participant R as Redis participant CON as Connect服务 C->>G: 登录请求(username/password/device_type) G->>A: 转发认证请求 A->>M: 查询用户信息验证凭据 M->>A: 返回用户数据 A->>A: 生成JWT Token A->>R: 存储Token和用户ID映射 A->>G: 返回JWT Token G->>C: 登录成功响应 Note over C: 客户端使用Token建立WebSocket连接 C->>CON: WebSocket连接(携带Token) CON->>R: 验证Token有效性 R->>CON: Token验证通过 CON->>C: WebSocket连接建立成功

单聊消息发送流程

流程图版本(逻辑流向)
flowchart LR A[客户端发送消息] --> B[Connect服务接收] B --> C[策略分发C2CMsgSendStrategyImpl] %% 并行处理分支 C --> D{并行处理} D --> E[发送到RocketMQ
异步业务处理] D --> F[查询接收方在线状态
实时消息路由] %% 异步业务处理分支 E --> G[Business服务消费MQ] G --> H[C2CSendMsgHandler处理] H --> I{并行数据存储} I --> J[MySQL存储会话信息] I --> K[HBase存储消息记录] K --> L[触发ES数据同步] L --> M[DataSync批量写入ES] J --> N[增加未读计数Redis] K --> N N --> O[Dubbo RPC发送Server ACK] O --> P[推送ACK给发送方] %% 实时消息路由分支 F --> Q{接收方状态判断} Q -->|在线且在本机| R[直接推送WebSocket消息] Q -->|在线但在其他机器| S[Dubbo RPC转发到目标机器] Q -->|离线| T[发送离线消息事件] S --> U[目标机器推送消息] T --> V[Business处理离线消息] V --> W[更新HBase状态为离线] W --> X[存储离线消息到Redis] X --> Y[伪造未读ACK给发送方] %% 消息确认流程 R --> Z[接收方发送ACK] U --> Z Z --> AA[Connect转发ACK到MQ] AA --> BB[Business处理ACK] BB --> CC[更新HBase消息状态] CC --> DD[触发状态更新ES同步] CC --> EE[清零未读计数if已读] EE --> FF[Dubbo发送ACK给发送方] FF --> GG[推送ACK确认] %% 样式定义 classDef connectService fill:#e1f5fe classDef businessService fill:#f3e5f5 classDef mq fill:#fff3e0 classDef storage fill:#e8f5e8 classDef client fill:#ffebee class B,C,F,Q,Z,AA connectService class G,H,V,BB businessService class E,L,T,AA mq class J,K,M,W,CC storage class A,R,U,Y,GG client

💻 技术栈总览

技术架构图谱

技术层次 技术选型 状态 用途说明
📱 客户端层 Flutter + Dart 跨平台移动客户端开发
🌐 接入层 Nginx 负载均衡、反向代理、HTTPS终结
🚪 网关层 Spring Cloud Gateway 统一API网关、路由分发、限流熔断
🔧 业务层 Spring Boot + Spring Cloud 微服务应用框架、服务治理
🔗 通信层 Netty + WebSocket + Dubbo 长连接通信、RPC服务调用
🔐 安全层 OAuth2 + Spring Security + JWT 身份认证、权限控制、令牌管理
⚙️ 中间件层 Nacos + ZooKeeper + RocketMQ 服务注册发现、消息队列、配置管理
💾 存储层 MySQL + HBase + Redis + ES 关系数据、大数据、缓存、搜索
📊 监控层 Prometheus + Grafana + Skywalking ✅/⏳ 性能监控、链路追踪、可视化
🚀 部署层 Jenkins + Docker Compose CI/CD流水线、容器编排部署

详细技术栈

分类 技术 版本 状态 说明
📱 前端 Flutter 3.24+ 跨平台UI框架,支持Android/iOS
📱 前端 Dart 3.4.4+ 现代化编程语言,强类型安全
🖥️ 后端 Java 11 核心编程语言
🖥️ 后端 Spring Boot 2.7.0 应用开发框架
🖥️ 后端 Spring Cloud 2021.0.3 微服务治理框架
🖥️ 后端 Spring Cloud Alibaba 2021.0.1.0 阿里云微服务套件
🖥️ 后端 Netty 4.1.75 高性能网络通信框架
🖥️ 后端 Dubbo 3.0.7 高性能RPC框架
⚙️ 中间件 Nacos 2.0.3 微服务注册中心、配置中心、服务发现
⚙️ 中间件 RocketMQ 5.3.0 分布式消息队列、削峰填谷
💾 存储 MySQL 8.0.23 关系型数据库、主从复制
💾 存储 HBase 2.6.1 分布式NoSQL、海量消息存储
💾 存储 Redis 6.2.6 内存数据库、缓存、分布式锁
💾 存储 Elasticsearch 7.17.5 搜索引擎、消息全文检索

✨ 核心功能概览

✅ 已实现功能

  • 🔐 用户认证: 注册、登录(OAuth2 + JWT)
  • 💬 单聊消息: 文字消息发送、撤回、ACK确认
  • 📊 消息存储: HBase分布式存储 + Elasticsearch搜索
  • 🔄 离线消息: Push推送机制(Pull拉取开发中)
  • 实时通信: WebSocket长连接 + Netty高性能
  • 🆔 消息ID: 分布式唯一ID生成算法
  • 💓 心跳检测: 服务端自动剔除超时连接

🚧 开发中功能

  • 📱 Flutter客户端: 聊天界面和交互逻辑
  • 📋 会话管理: 最近会话列表

📋 规划功能

  • 🗨️ 群聊系统: 群组消息、群管理(写扩散模型)
  • 👥 好友系统: 好友关系管理
  • 📁 多媒体消息: 图片、语音、视频消息
  • 🔍 消息搜索: 基于Elasticsearch的全文检索
  • 📱 客户端增强: 断线重连、消息排序、防重处理
  • 🎯 会话功能: 置顶、删除、免打扰
  • 📹 音视频通话: WebRTC实时通信
  • 📺 直播功能: 实时直播推流

🚀 快速启动

🖥️ 服务端启动

项目提供了线上测试环境,相关依赖的中间件都已经部署在服务器上,公网可流畅连接。

IDEA中运行

直接下载此项目main分支,一键启动即可:

bash 复制代码
# 1. 克隆项目
git clone https://github.com/598572/xzll-im-server.git
cd xzll-im-server

# 2. 导入IDEA项目
# 打开IntelliJ IDEA,选择"Open",选择项目根目录
# 等待Maven依赖下载完成(首次可能需要5-10分钟)
微服务启动顺序

重要: 必须按以下顺序启动,确保服务依赖关系正确:

  1. im-auth (认证服务) - 端口:8082

    • 位置: im-auth/src/main/java/com/xzll/auth/IMAuthServiceApplication.java
    • 作用: 用户认证、JWT令牌生成
  2. im-connect (长连接服务) - 端口:10001

    • 位置: im-connect/im-connect-service/src/main/java/com/xzll/connect/IMConnectServiceApplication.java
    • 作用: WebSocket连接管理、实时消息推送
  3. im-business (业务服务) - 端口:8083

    • 位置: im-business/im-business-service/src/main/java/com/xzll/business/IMBusinessServiceApplication.java
    • 作用: 核心业务逻辑、消息处理
  4. im-console (控制台服务) - 端口:8084

    • 位置: im-console/im-console-service/src/main/java/com/xzll/console/IMConsoleServiceImplApplication.java
    • 作用: 管理后台接口
  5. im-data-sync (数据同步服务) - 端口:8085

    • 位置: im-data-sync/src/main/java/com/xzll/datasync/IMDataSyncApplication.java
    • 作用: HBase到Elasticsearch数据同步

📱 Flutter客户端启动

bash 复制代码
# 1. 克隆Flutter客户端
git clone https://github.com/598572/xzll-im-flutter-client.git
cd xzll-im-flutter-client

# 2. 安装依赖
flutter pub get

# 3. 检查Flutter环境
flutter doctor

# 4. 启动应用(确保设备已连接)
flutter run

🤝 如何参与开发

🔥 高优先级任务

  • 📱 客户端开发: Flutter前端界面和交互
  • 🗨️ 群聊功能: 群组消息、群管理
  • 👥 好友系统: 好友关系管理
  • 🔍 消息搜索: 基于Elasticsearch的全文检索
  • 📁 多媒体消息: 图片、语音、视频消息

🌟 中优先级任务

  • 📋 会话管理: 置顶、删除、免打扰
  • 🔄 断线重连: 客户端重连机制
  • 📊 性能优化: 系统性能调优
  • 📖 文档完善: 技术文档和API文档

👶 新手友好任务

  • 📝 文档完善: 补充代码注释、API文档
  • 🧪 测试编写: 添加单元测试用例
  • 🎨 UI优化: Flutter界面美化
  • 🐛 简单Bug修复: 修复已知小问题

🌿 分支管理

bash 复制代码
# 创建功能分支
git checkout -b feature/your-feature-name

# 示例分支命名
feature/group-chat          # 群聊功能
feature/friend-system       # 好友系统  
feature/message-search      # 消息搜索
bugfix/connection-issue     # 连接问题修复
docs/api-documentation      # API文档编写

📝 提交信息规范

bash 复制代码
# 格式: type(scope): description

# 功能开发
feat(auth): 添加OAuth2认证功能
feat(chat): 实现群聊消息发送

# 问题修复  
fix(connect): 修复WebSocket连接断开问题
fix(ui): 修复聊天界面滚动卡顿

# 文档更新
docs(api): 更新REST API文档
docs(readme): 完善部署说明

📋 功能开发进度表

图例说明:

  • ⬜ :未实现
  • ⏳ :正在进行中
  • ✅ :已实现
  • ❌ :已取消

🔐 登录&注册

功能 当前进度 实现者 备注
注册 后端✅,前端✅ 蝎子莱莱爱打怪 用户注册功能完整实现
登录 后端✅,前端✅ 蝎子莱莱爱打怪 登录成功后按算法选取可用长连接服务

💬 单聊相关

功能 当前进度 实现者 备注
单聊(发文字) 后端✅,前端⏳ 后端(蝎子莱莱爱打怪),前端(蝎子莱莱爱打怪) 🔥 高优先级
单聊(发图片) 后端⬜,前端⬜ - 🔥 高优先级
单聊(发语音) 后端⬜,前端⬜ - 🔥 高优先级
单聊(撤回) 后端✅,前端⬜ 后端(蝎子莱莱爱打怪) 🔥 高优先级
单聊(ACK确认) 后端✅,前端⬜ 后端(蝎子莱莱爱打怪) 🔥 高优先级

🗨️ 群聊相关

功能 当前进度 备注
群聊(方案/表设计) 🚀 高级任务 - 采用写扩散模型
群聊(发文字) 后端⬜,前端⬜ 🚀 高级任务
群聊(群管理) 后端⬜,前端⬜ 🚀 高级任务 - 创建/退出/解散/角色管理

📋 会话相关

功能 当前进度 备注
最近会话列表 后端⏳,前端⏳ 🔥 高优先级
置顶 后端⬜,前端⬜ 🌟 中优先级
删除会话 后端⬜,前端⬜ 🌟 中优先级

🔧 其他功能

功能 当前进度 备注
离线消息 后端✅,前端⬜ Push✅+Pull⬜
客户端断线重连 前端⬜ 🔥 高优先级 - 后端无需参与
聊天消息搜索 后端⬜,前端⬜ 🌟 中优先级 - 基于ES
消息失败重试 后端✅,前端⬜ 🔥 高优先级

💬 交流与合作

👨‍💻 项目维护者

蝎子莱莱爱打怪

微信:

💬 交流群

加我微信 我拉入群。

加入步骤:

  1. 扫码添加个人微信(15230853779)
  2. 说明来意(参与开源项目)
  3. 邀请进入技术交流群

📧 联系方式

🎯 项目亮点

🏗️ 架构设计亮点

  • 微服务架构: 采用Spring Cloud生态,服务拆分合理
  • 高性能通信: Netty + WebSocket实现高并发长连接
  • 消息可靠性: RocketMQ削峰填谷,保证消息不丢失
  • 数据存储: MySQL + HBase + Redis + ES多层存储架构
  • 服务治理: Nacos + Dubbo实现服务注册发现和RPC调用

💡 技术创新点

  • 分布式消息ID: 自研分布式唯一ID生成算法
  • 读扩散群聊: 群聊采用读扩散模型,性能更优
  • 离线消息: Push + Pull双重保障离线消息可达
  • 实时路由: 智能路由算法,支持跨机器消息推送
  • 数据同步: 异步数据同步机制,HBase到ES实时同步
  • 分布式水平扩容: im-connect、im-data-sync、im-business均可水平横向无限扩容

🔧 工程化实践

  • CI/CD: Jenkins自动化构建部署
  • 容器化: Docker Compose一键部署
  • 监控体系: Prometheus + Grafana + Skywalking全栈监控
  • 代码规范: 统一的编码规范和提交规范
  • 文档体系: 完善的技术文档和API文档

🌟 写在最后

这个项目承载着我对技术的热爱和对开源精神的信仰。每一行代码都经过深思熟虑,每一个架构决策都有其考量。我希望这个项目不仅仅是一个IM系统,更是一个学习和交流的平台。

如果你对分布式系统、即时通讯、微服务架构感兴趣,或者想要参与开源项目,欢迎加入我们!无论你是资深开发者还是初学者,都能在这里找到适合自己的任务。

让我们一起打造优秀的开源IM系统! 🚀


🔗 相关链接

如果这个项目对你有帮助,请给个⭐Star支持一下!

相关推荐
想用offer打牌4 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
崔庆才丨静觅4 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60615 小时前
完成前端时间处理的另一块版图
前端·github·web components
KYGALYX5 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了5 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅5 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅5 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法6 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
崔庆才丨静觅6 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment6 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端