以太IM平台是一个基础通用的IM推送平台,支持推送单聊、群聊消息,以及文本消息、图片、文件、语音(也是文件)类型的消息。 支持多端消息推送、 支持横向拓展支撑海量的连接。 该平台是给其他系统提供消息推送服务,比如给客服系统提供消息推送服务。
- ether-im-push: 消息推送模块, 与用户终端建立链接、推送消息到用户终端。
- ether-im-sdk: 用来调用消息推送模块的客户端。
- ether-im-common: 基础公共模块
- ether-im-client-example: 用户终端示例模块,可以模仿用户终端接收消息的处理逻辑。
- ether-im-client-common: 用户终端公共模块,提供用户终端和消息推送模块的交互公共类。
- SpringBoot
- Mybatis-Plus
- Netty
- Redis
- RocketMQ
- MySQL8
- Fastjson
- Maven
- Jdk1.8
因为该系统是一个独立的消息推送平台,所以不需要存储全部的数据,只存放最近一个月的数据,全部的数据在业务系统中存放即可。
- 消息持久化存储:采用MySQL持久化存储一段时间的消息。
- 消息重试机制:采用RocketMQ消息队列进行消息重试机制,同时使用spring retry重试机制 和ack确认机制保证消息可靠性。
- 消息幂等性:
- 消息安全性:
- 网络链接的可靠性:基于IdleStateHandler实现⼼跳机制。
- 基于⾼性能⽹络通讯框架 Netty 搭建消息推送服务,维护与终端的⻓连接,实现消息的实时推送,相对于之前的拉取消息的⽅式,降低了⼤约93%的消息延迟。同时⽀持⽆限拓展服务节点应对海量连接。
- 以 Google ProtoBuffer 和 Netty 编解码器为基础,成功实现了⾃定义的⼆进制通讯协议。系统在此基础上同时⽀持 JSON ⽂本与⼆进 制通讯协议,客⼾端可按照实际需求⾃主决定选择使⽤。
- 基于IdleStateHandler实现⼼跳机制,根据读空闲事件控制发送⼼跳时机,规避了不必要⼼跳包的发送以及固定时间⼼跳包导致的⽹络拥塞状况。
- 基于消息中间件 RocketMQ 实现消息推送服务与 IM SDK 的解耦,借助异步调⽤⼤幅提升系统吞吐量。
- 在 IM SDK 中,通过批量发送相同 Topic 不同 Tag 的 MQ 消息⾄不同的推送服务,显著降低了⽹络开销同时也提升了系统吞吐量。
- 依靠观察者设计模式与异步事件机制,出⾊地实现了对多样化事件的处理,其中包括⽤⼾和消息状态的变更⼴播与处理。例如,在⽤ ⼾上线的瞬间,系统能⾃动、迅速地推送离线消息,显著增强了系统的功能性和⽤⼾友好性。
- 借助 RocketMQ 的事务消息机制,有⼒地保障了消息持久化与消息发送的⾼度⼀致性,确保数据的完整性和可靠性。
- 基于策略设计模式及开闭原则完成对不同类型消息的处理,增加了系统可读性和可维护性。
- 凭借 Spring Retry、Guava 本地缓存和消息触达机制构建消息推送的重试机制,尽最⼤可能确保消息送达⽤⼾终端。
- 在⽹关系统中,⽀持对 WebSocket 连接请求的 Token 校验。借助⾃定义负载均衡策略,按照⽤⼾ Id 进⾏路由,实现了同⼀个⽤⼾的 多个终端连接同⼀个 IM 推送服务,利于管理和释放内存,优化了系统资源的使⽤。
- 消息加密:实现消息端到端的加密。
- 敏感词过滤