项目设计---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 通信协议
      • 4.3.2 序列化/反序列化

一. 项目描述

在高并发量的情况下,针对某一台服务器的访问量激增就可能导致该服务器“宕机”,造成难以估量的损失。因此,就需要我们自己设计一个MQ来进行“削峰填谷”保证服务器能够平稳运行。在我们的MQ中可以实现以下功能:

  • 我们的MQ实现了对虚拟主机、交换机、队列、绑定、消息的管理
  • 在客户端准备好要发送的消息,将消息进行序列化后通过网络传输发送到服务器的指定交换机中,服务器接收消息并进行反序列化得到真实的消息交给交换机处理。交换机有三种转发规则:DIRECT、FANOUT、TOPIC,根据消息信息交换机选择一种转发规则把消息存储到队列中
  • 如果MQ停机维护重启后就会导致消息丢失,因此我们需要把消息存储到硬盘上,我们选择存储到文件。对于交换机、队列、绑定来说也需要存储,我们选择在内存和数据库都存储一份
  • 此外服务器还要实现对于消息的订阅和推送,将消息推送给已经订阅的消费者

二. 核心技术

  1. SpringBoot:作为框架支持
  2. InputStream/OutputStream:用于读取资源
  3. Socket:用来进行网络传输
  4. MySQL/MyBatis:用来在硬盘存储数据

三. 需求分析+概要设计

对于MQ来说,会有多个生产者推送消息,会有多个消费者消费消息。我们就需要中间人来对消息进行管理实现消息的推送和转发。
项目设计---MQ_第1张图片
借鉴于RabbitMQ,我们在服务器(Broker Server)中使用虚拟主机、交换机、队列、绑定、消息等概念来管理消息,并把他们分别进行存储。在这些概念的基础上,我们需要实现MQ的基本功能,比如:消息发布、消息订阅、消息应答、消息转发、网络通信等。所以,我们设计以下不同模块来实现MQ:
项目设计---MQ_第2张图片

四. 详细设计

4.1 服务器模块

4.1.1 内存管理

项目设计---MQ_第3张图片

4.1.2 硬盘管理

4.1.2.1 数据库管理

项目设计---MQ_第4张图片

项目设计---MQ_第5张图片

4.1.2.2 文件管理

项目设计---MQ_第6张图片
项目设计---MQ_第7张图片
项目设计---MQ_第8张图片
项目设计---MQ_第9张图片

4.1.3 消息转发

项目设计---MQ_第10张图片
项目设计---MQ_第11张图片

再由服务器把消息推送给订阅了消息的消费者
项目设计---MQ_第12张图片
项目设计---MQ_第13张图片

4.2 客户端模块

4.2.1 连接管理

项目设计---MQ_第14张图片
项目设计---MQ_第15张图片
项目设计---MQ_第16张图片

4.2.2 信道管理

项目设计---MQ_第17张图片
项目设计---MQ_第18张图片

4.3 公共模块

4.3.1 通信协议

项目设计---MQ_第19张图片
项目设计---MQ_第20张图片

4.3.2 序列化/反序列化

项目设计---MQ_第21张图片

项目设计---MQ_第22张图片

你可能感兴趣的:(项目,java)