# im-system **Repository Path**: java-object-oriented/im-system ## Basic Information - **Project Name**: im-system - **Description**: 使用netty开发的一个im即时通讯系统 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 7 - **Created**: 2023-04-26 - **Last Updated**: 2025-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 介绍 IM即时通讯系统是一种高性能、可扩展的企业级即时通讯解决方案,基于Java语言开发,提供稳定可靠的消息收发、用户关系管理、群组管理等核心功能。系统采用分布式架构设计,能够支持高并发、大容量的消息处理场景,适用于社交、企业通讯、在线客服等多种应用场景。 ## 项目结构 ``` im-system ├── im-common # 通用工具类、常量、枚举、基础模型等公共模块 ├── im-codec # 消息编解码模块,处理不同类型消息的序列化和反序列化 ├── im-service # 业务服务模块,包含用户、好友、群组等核心业务逻辑 ├── im-tcp # TCP网关模块,基于Netty实现的网络通信层 ├── im-message-store # 消息存储模块,负责消息的持久化存储 ├── doc # 项目文档目录 └── logs # 日志存储目录 ``` ## 软件架构 ### 总体架构 系统采用典型的C/S(Client/Server)架构,服务端由多个微服务组件构成,通过分布式架构实现高可用和可扩展性。 1. **服务层**:由多个独立微服务组成,包括业务服务(im-service)、TCP网关服务(im-tcp)和消息存储服务(im-message-store) 2. **通信层**:基于Netty的TCP通信框架,保证消息的可靠传输 3. **存储层**:采用MySQL作为关系型数据库,Redis作为缓存,RabbitMQ作为消息队列 4. **注册中心**:使用Zookeeper实现服务发现和注册 ### 核心流程 - 客户端通过TCP网关建立长连接 - 消息通过编解码模块处理后分发到对应业务服务 - 业务服务处理业务逻辑并可能将消息持久化到消息存储服务 - 消息通过TCP网关推送到目标客户端 ## 技术栈 - **核心框架**:Spring Boot 2.3.2, Spring Cloud Hoxton.SR8 - **数据访问**:MyBatis-Plus 3.4.2, MySQL - **缓存**:Redis, Redisson 3.15.6 - **消息队列**:RabbitMQ 5.6.0 - **网络通信**:Netty 4.1.35.Final - **服务治理**:Zookeeper - **API文档**:Swagger 2.9.2, Knife4j 2.0.7 - **工具库**:Hutool 5.0.6, Fastjson 1.2.51, Apache Commons Lang3 - **构建工具**:Maven ## 核心功能模块 ### 1. 用户管理 - 用户注册、登录、信息维护 - 用户在线状态管理 - 用户设备管理 ### 2. 好友关系管理 - 好友添加、删除、查询 - 好友分组管理 - 好友权限控制 ### 3. 群组管理 - 群组创建、解散、信息维护 - 群成员管理(添加、移除、权限设置) - 群公告、群共享文件管理 ### 4. 消息管理 - 单聊消息发送、接收、存储 - 群聊消息发送、接收、存储 - 消息同步、撤回、已读状态管理 - 多终端消息同步 ### 5. 网络通信 - 基于Netty的高性能TCP长连接管理 - 消息编解码与协议处理 - 心跳机制与连接保活 - 服务节点发现与负载均衡 ## 部署与启动 ### 环境要求 - JDK 1.8+ - Maven 3.6+ - MySQL 5.7+ - Redis 5.0+ - RabbitMQ 3.8+ - Zookeeper 3.6+ ### 启动顺序 1. 首先启动基础服务:MySQL、Redis、RabbitMQ、Zookeeper 2. 构建项目:`mvn clean package` 3. 启动消息存储服务:`java -jar im-message-store/target/im-message-store-1.0-SNAPSHOT.jar` 4. 启动业务服务:`java -jar im-service/target/im-service-1.0-SNAPSHOT.jar` 5. 启动TCP网关服务:`java -jar im-tcp/target/im-tcp-1.0-SNAPSHOT.jar` ### 接口文档 项目集成了Swagger和Knife4j提供API文档,服务启动后可通过以下地址访问: - Swagger UI:http://localhost:端口/swagger-ui.html - Knife4j UI:http://localhost:端口/doc.html ## 开发指南 ### 模块职责说明 - **im-common**:包含所有模块共用的代码,如工具类、常量、异常定义等 - **im-codec**:负责消息的编解码,定义了各种消息类型的协议格式 - **im-service**:业务核心模块,实现各种业务功能 - **im-tcp**:网络通信模块,处理客户端连接和消息传输 - **im-message-store**:消息存储模块,负责消息的持久化 ### 代码规范 - 遵循Spring Boot最佳实践 - 使用Lombok简化代码 - 采用MyBatis-Plus进行数据访问 - 接口返回统一使用RestResponse封装 ## 监控与日志 - 系统日志存放在logs目录下,按日期滚动 - 可以通过修改logback配置调整日志级别和输出方式 - 核心业务操作均有详细日志记录,便于问题排查 ## 常见问题排查 1. **连接问题**:检查Netty服务是否正常启动,端口是否被占用 2. **消息发送失败**:检查RabbitMQ是否正常运行,相关队列是否存在 3. **数据不一致**:检查数据库和缓存数据是否同步,可能需要手动清理缓存 4. **服务注册失败**:检查Zookeeper连接状态,确认服务注册配置正确