文章目录
- 一. 项目描述
- 二. 核心技术
- 三. 需求分析+概要设计
- 四. 详细设计
- 4.1 服务器模块
- 4.1.1 内存管理
- 4.1.2 硬盘管理
- 4.1.2.1 数据库管理
- 4.1.2.2 文件管理
- 4.1.3 消息转发
- 4.2 客户端模块
- 4.2.1 连接管理
- 4.2.2 信道管理
- 4.3 公共模块
- 4.3.1 通信协议
- 4.3.2 序列化/反序列化
一. 项目描述
在高并发量的情况下,针对某一台服务器的访问量激增就可能导致该服务器“宕机”,造成难以估量的损失。因此,就需要我们自己设计一个MQ来进行“削峰填谷”保证服务器能够平稳运行。在我们的MQ中可以实现以下功能:
- 我们的MQ实现了对虚拟主机、交换机、队列、绑定、消息的管理
- 在客户端准备好要发送的消息,将消息进行序列化后通过网络传输发送到服务器的指定交换机中,服务器接收消息并进行反序列化得到真实的消息交给交换机处理。交换机有三种转发规则:DIRECT、FANOUT、TOPIC,根据消息信息交换机选择一种转发规则把消息存储到队列中
- 如果MQ停机维护重启后就会导致消息丢失,因此我们需要把消息存储到硬盘上,我们选择存储到文件。对于交换机、队列、绑定来说也需要存储,我们选择在内存和数据库都存储一份
- 此外服务器还要实现对于消息的订阅和推送,将消息推送给已经订阅的消费者
二. 核心技术
- SpringBoot:作为框架支持
- InputStream/OutputStream:用于读取资源
- Socket:用来进行网络传输
- MySQL/MyBatis:用来在硬盘存储数据
三. 需求分析+概要设计
对于MQ来说,会有多个生产者推送消息,会有多个消费者消费消息。我们就需要中间人来对消息进行管理实现消息的推送和转发。
借鉴于RabbitMQ,我们在服务器(Broker Server)中使用虚拟主机、交换机、队列、绑定、消息等概念来管理消息,并把他们分别进行存储。在这些概念的基础上,我们需要实现MQ的基本功能,比如:消息发布、消息订阅、消息应答、消息转发、网络通信等。所以,我们设计以下不同模块来实现MQ:
四. 详细设计
4.1 服务器模块
4.1.1 内存管理
4.1.2 硬盘管理
4.1.2.1 数据库管理
4.1.2.2 文件管理
4.1.3 消息转发
再由服务器把消息推送给订阅了消息的消费者
4.2 客户端模块
4.2.1 连接管理
4.2.2 信道管理
4.3 公共模块
4.3.1 通信协议