# instant-message-global-all **Repository Path**: chen-yilin-0/instant-message-global-all ## Basic Information - **Project Name**: instant-message-global-all - **Description**: 基于 SpringBoot3 + JDK17 的IM即时通讯系统的单机版本以及分布式版本 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-09-11 - **Last Updated**: 2025-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IM 即时通讯系统 ## 项目概述 本项目是一个基于 Spring Boot 3.2.0 的即时通讯系统,支持单体架构和分布式架构。系统采用现代化的技术栈,包括 MySQL 8、Redis、Zookeeper、RocketMQ、Netty、Nginx、JWT 认证鉴权、Minio 等,前端使用 Vue3、JavaScript、WebSocket 和 WebRTC 技术。系统实现了私聊、群聊、好友管理、用户管理、文件管理等功能,支持 TCP 和 WebSocket 协议。 ## 技术栈 ### 后端技术 - **Spring Boot 3.2.0**: 用于构建后端服务。 - **MySQL 8**: 作为主数据库,存储用户信息、聊天记录等。 - **Redis**: 用于缓存和会话管理以及限流。 - **Zookeeper**: 用于服务注册与发现,Netty 服务端注入到节点并进行请求路由。 - **RocketMQ**: 用于消息队列,处理异步消息。 - **Netty**: 用于实现 TCP 和 WebSocket 协议的通信。 - **Nginx**: 用于负载均衡和反向代理以及限流。 - **JWT**: 用于用户认证和鉴权。 - **Minio**: 用于文件存储,支持头像上传等功能。 - **Swagger3**: 用于knife4j接口文档。 - **DDD (领域驱动设计)**: 采用 DDD 模式进行系统设计。 ### 前端技术 - **Vue 3**: 用于构建前端应用。 - **JavaScript**: 前端主要编程语言。 - **WebSocket**: 用于实时通信。 - **WebRTC**: 用于视频通话功能。 ## 功能列表 ### 1. 私聊信息 - **发送私聊消息**: 用户可以向其他用户发送私聊消息。 - **保存私聊消息**: 私聊消息会被保存到数据库中。 - **私聊消息拉群**: 可以将私聊消息拉入群聊。 - **私聊消息推送**: 实时推送私聊消息给接收方。 - **视频通话**: 支持用户之间的视频通话。 - **挂断视频**: 用户可以主动挂断视频通话。 - **拒接视频**: 用户可以拒接视频通话请求。 ### 2. 群聊信息 - **发送群聊消息**: 用户可以在群聊中发送消息。 - **保存群聊消息**: 群聊消息会被保存到数据库中。 - **群聊消息推送**: 实时推送群聊消息给群成员。 ### 3. 群聊管理 - **创建群聊**: 用户可以创建新的群聊。 - **加入群聊**: 用户可以加入已有的群聊。 - **群聊踢人**: 群主或管理员可以将成员踢出群聊。 - **退出群聊**: 用户可以主动退出群聊。 - **解散群聊**: 群主可以解散群聊。 - **邀请入群**: 群主或管理员可以邀请用户加入群聊。 - **群成员信息修改**: 群主或管理员可以修改群成员信息。 ### 4. 好友管理 - **添加好友**: 用户可以添加其他用户为好友。 - **删除好友**: 用户可以删除好友。 - **好友信息修改**: 用户可以修改好友信息。 ### 5. 用户管理 - **用户登录**: 用户可以通过登录接口进行登录。 - **用户注册**: 新用户可以通过注册接口进行注册。 - **用户信息修改**: 用户可以修改自己的个人信息。 ### 6. 文件管理 - **上传图片**: 用户可以上传图片,主要用于头像上传。 - **上传文件**: 用户可以上传文件。 ## 项目结构 ``` instant-message-global-all/ ├── instant-message-distributed-architecture/ # 后端分布式架构代码(未开发) │ ├── src/ # 源代码 │ └── pom.xml # Maven 配置文件 ├── instant-message-single-architecture/ # 后端单体架构代码(基本开发完) │ ├── instant-message-application/ # 应用层,主要包含netty、Zookeeper、业务Service服务、MQ消费者(包含RocketMQ的事物半消息)、SDK │ │ ├── src/ # 源代码 │ │ └── pom.xml # Maven 配置文件 │ ├── instant-message-common/ # 公共模块 │ │ ├── instant-mesage-datasource/ # 数据源模块,主要基于mybatis-plus,包含代码自动生成以及根据实体生成SQL │ │ │ ├── src/ # 源代码 │ │ │ └── pom.xml # Maven 配置文件 │ │ ├── instant-message-access-limit/ # 基于注解和切面以及拦截器限流 │ │ │ ├── src/ # 源代码 │ │ │ └── pom.xml # Maven 配置文件 │ │ ├── instant-message-cache/ # 分布式缓存(redis)和本地缓存(guava)以及分布式锁 │ │ │ ├── src/ # 源代码 │ │ │ └── pom.xml # Maven 配置文件 │ │ ├── instant-message-dynamic-thread-pool/ # 动态线程池 │ │ │ ├── src/ # 源代码 │ │ │ └── pom.xml # Maven 配置文件 │ │ ├── instant-message-email-sms/ # 邮箱和短信SMS的发送 │ │ │ ├── src/ # 源代码 │ │ │ └── pom.xml # Maven 配置文件 │ │ ├── instant-message-full-link-tracing/ # 全链路追踪日志MDC │ │ │ ├── src/ # 源代码 │ │ │ └── pom.xml # Maven 配置文件 │ │ ├── instant-message-risk-rule/ # 配置规则链以及黑白名单以及用户上下文(责任连模式) │ │ │ ├── src/ # 源代码 │ │ │ └── pom.xml # Maven 配置文件 │ │ ├── instant-message-single-mq/ # RocketMQ消息队列的发送以及事件的传递 │ │ │ ├── src/ # 源代码 │ │ │ └── pom.xml # Maven 配置文件 │ │ ├── instant-message-utils/ # 工具模块 │ │ │ ├── src/ # 源代码 │ │ │ └── pom.xml # Maven 配置文件 │ ├── instant-message-domain/ # 领域层,包含实体、仓储模块、以及领域服务,主要用于领域事件通知 │ │ ├── src/ # 源代码 │ │ └── pom.xml # Maven 配置文件 │ ├── instant-message-infrastructure/ # 基础设施层 │ │ ├── src/ # 源代码 │ │ └── pom.xml # Maven 配置文件 │ ├── instant-message-interface/ # 用户接口层,主要是web控制层接口 │ │ ├── src/ # 源代码 │ │ └── pom.xml # Maven 配置文件 │ ├── instant-message-server/ # 启动服务,包含启动类 InstantMessageApplication.java │ │ ├── src/ # 源代码 │ │ └── pom.xml # Maven 配置文件 │ ├── instant-message-workflow/ # 工作流 │ │ ├── src/ # 源代码 │ │ └── pom.xml # Maven 配置文件 ├── instant-message-vue/ # 前端项目代码(未开发完) │ ├── src/ # 源代码 │ └── package.json # NPM 配置文件 ├── README.md # 项目说明文件 ├── instant_message.sql.sql # 数据库SQL文件 ├── LICENSE # 许可证 ├── pom.xml # 分布式以及单体架构所有依赖版本配置 └── docker-compose.yml # Docker Compose 配置文件 ``` ## 快速开始 ### 1. 克隆项目 ``` git clone https://gitee.com/chen-yilin-0/instant-message-global-all.git ``` ### 2. 进入项目目录(请确保已安装Java和Maven环境,运行后端服务) ``` cd instant-message-global-all ``` ### 3. 运行前端服务(确保已安装Node.js和npm) ``` npm install npm run serve ``` ### 4. 注意事项 请确保所有的依赖服务(如MySQL、Redis、RocketMQ、Minio、Zookeeper等)已正确配置并运行。 在生产环境中推荐使用Docker部署,提高系统的可扩展性和可管理性。 ### 4. 联系方式 如有任何疑问,请随时通过邮箱 [1243063413@qq.com] 联系我。 感谢您的访问,希望这个IM即时通讯系统能够帮助到您! ### 5. 贡献 欢迎贡献代码!请 fork 本项目并提交 Pull Request。 ### 6. 安装中间件 #### 6.1 RocketMQ 安装启动 ##### windows中 RocketMq下载 链接如下 ``` 安装介绍: https://www.cnblogs.com/fanwenyan/p/18159198 https://www.cnblogs.com/yizhiamumu/p/16818680.html 当前环境是jdk17,需要更换jdk8,解决启动NameServer和Broker报错 Unrecognized VM option ‘UseConcMarkSweepGC‘: https://juejin.cn/post/7301342025881468937 控制台windows可用: https://cloud.tencent.com/developer/article/2301718 https://www.redisant.cn/rocketmq ``` ##### RocketMq启动 win+R 输入cmd 切换到rocketMq目录 ``` D:\RocketMQ\rocketmq-all-5.1.4-bin-release\bin start mqnamesrv.cmd start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true ``` ##### windows中 RocketMq的使用 链接如下 https://blog.csdn.net/sinat_34104446/article/details/125094618 https://blog.csdn.net/m0_68408835/article/details/1349189 在RocketMQ中,可以通过命令行工具或者使用RocketMQ的Java客户端来确定RocketMQ里面是否有消息,并查看具体的消息内容。 使用RocketMQ的命令行工具可以通过以下命令来查看具体的消息内容:其中``为RocketMQ的NameServer地址,``为消息的ID。 ``` mqadmin queryMsgById -n -i ``` 关于RocketMQ的更多信息可以参考官方文档:https://rocketmq.apache.org/ ##### windows中 Nacos 的使用 链接如下 https://blog.csdn.net/2301_78646673/article/details/134008051(主要区分sprinBoot3与2的配置区别) https://www.cnblogs.com/crazymakercircle/p/14231815.html(怎么去更换数据源、怎么进行集群搭建) 关于 Nacos 的更多信息可以参考官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html