项目设计---消息驿站

文章目录

  • 一. 项目描述
  • 二. 核心技术
  • 三. 需求分析+概要设计
  • 四. 详细设计
    • 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来说,会有多个生产者推送消息,会有多个消费者消费消息。我们就需要中间人来对消息进行管理实现消息的推送和转发。
在这里插入图片描述
借鉴于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 通信协议

在这里插入图片描述
在这里插入图片描述

4.3.2 序列化/反序列化

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/255640.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

netty07-粘包半包以及解决方案

粘包指的是发送方在发送数据时,多个数据包被合并成一个大的数据包发送到接收方,接收方在接收时无法准确地区分各个数据包的边界,从而导致数据粘在一起。 半包指的是发送方发送的数据包被拆分成了多个小的数据包,在接收方接收时&a…

简单实现Spring容器(一)

阶段1: 编写自己的Spring容器,实现扫描包,得到bean的class对象.思路: 使用 ElfSpringConfig.java 替代beans.xml文件作为配置文件,从中获取到: 1.扫描包,得到bean的class对象. 2.排除包下不是bean的 1.容器文件 ElfSpringApplicationContext.java 核心!!! package com.elf…

05、pytest断言确定的异常

官方用例 # content of test_sysexit.py import pytestdef f():raise SystemExit(1)def test_mytest():with pytest.raises(SystemExit):f()解读与实操 ​ 标准python raise函数可产生异常。pytest.raises可以断言某个异常会发现。异常发生了,用例执行成功&#x…

AntDesignBlazor示例——创建查询条件

本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考。 示例代码仓库:https://gitee.com/known/AntDesignDemo 1. 学习目标 重构项目文件结构添加日期查询条件实现查询业务逻辑 2. 重构项目结构 在实现列表查询条件功…

静态住宅代理科普——实际应用场景以及如何配置?

住宅代理IP不仅是理论上的网络工具,它在多个实际应用场景中表现突出,极大地便利了用户的网络操作。接下来,将深入探讨住宅代理IP在市场调研、内容访问、社交媒体管理等方面的实际应用,揭示其在不同领域的实用价值。 ## 实际应用场…

CSS新手入门笔记整理:CSS溢出声名overflow

通常一个盒子的内容是被限制在盒子边框之内的,但是有时也会溢出,即部 分或者全部内容跑到盒子边框之外。 语法 元素{overflow:取值;} 属性值 说明 visible 若内容溢出,则溢出内容可见(默认值) hid…

Numpy数组的创建(第一讲)

Numpy数组的创建 (第1讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ&#x1f…

【hacker送书第10期】AI时代系列丛书(五选一)

AI时代系列丛书 AI时代程序员开发之道✨内容简介参与方式 AI时代项目经理成长之道✨内容简介参与方式 AI时代架构师修炼之道✨内容简介参与方式 AI时代产品经理升级之道✨内容简介参与方式 AI时代Python量化交易实战✨内容简介参与方式 AI时代程序员开发之道✨ 内容简介 本书是…

VBA技术资料MF93:将多个Excel表插入PowerPoint不同位置

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

私域最全养号攻略---微信

微信号的使用规则: 注册新微信、微信实名认证、主动添加好友、面对面建群、被动添加好友、进群限制、朋友圈限制、好友上限 微信权重加分规则: 基础信息是否完整、注册时间、微信使用行为、 微信权重扣分规则: 使用的环境是否正常、部分行为会…

C++新经典模板与泛型编程:SFINAE特性的信息萃取

用成员函数重载实现is_default_constructible 首先介绍一个C标准库提供的可变参类模板std::is_default_constructible。这个类模板的主要功能是判断一个类的对象是否能被默认构造(所谓默认构造,就是构造一个类对象时,不需要给该类的构造函数…

广告电商模式:看广告还能赚钱

随着互联网的快速发展和普及,电子商务和广告行业也在不断演变和创新。在此背景下,一种新型的商业模式——广告电商模式应运而生。这种模式将广告与电子商务相结合,通过精准营销和用户参与,实现了广告主、电商平台和消费者的三方共…