项目设计---MQ

news2024/9/23 11:27:25

文章目录

  • 一. 项目描述
  • 二. 核心技术
  • 三. 需求分析+概要设计
  • 四. 详细设计
    • 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.coloradmin.cn/o/1272645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 如何在文件中查找指定内容,grep的用法

Linux 如何在文件中查找指定内容 1、 如我们 查找 log_file_catalina.out 文件中,包含 ‘总数:900’ 的字符内容 2、 在日志中查看 83910_law_21CFBC7EB25B1FF60255FE7F4BE1BCCF1CE726F6_0.bdyhf 的相关内容 grep 83910_law_21CFBC7EB25B1FF60255FE7…

Redis String类型

String 类型是 Redis 最基本的数据类型,String 类型在 Redis 内部使用动态长度数组实现,Redis 在存储数据时会根据数据的大小动态地调整数组的长度。Redis 中字符串类型的值最大可以达到 512 MB。 关于字符串需要特别注意∶ 首先,Redis 中所…

[vue3] 使用 vite 创建vue3项目的详细流程

一、vite介绍 Vite(法语意为 “快速的”,发音 /vit/,发音同 “veet”) 是一种新型前端构建工具,能够显著提升前端开发体验(热更新、打包构建速度更快)。 二、使用vite构建项目 【学习指南】学习新技能最…

IDE1007:当前上下文中不存在名称“xxx“

这种在Halcon中直接导出的代码不能直接放程序中,应该在控件中比如一个按钮中,就不会出错了。

MacOS + Android Studio 通过 USB 数据线真机调试

环境:Apple M1 MacOS Sonoma 14.1.1 软件:Android Studio Giraffe | 2022.3.1 Patch 3 设备:小米10 Android 13 一、创建测试项目 安卓 HelloWorld 项目: 安卓 HelloWorld 项目 二、数据线连接手机 1. 手机开启开发者模式 参考&#xff1…

ruoyi+Hadoop+hbase实现大数据存储查询

前言 有个现实的需求,数据量可能在100亿条左右。现有的数据库是SQL Server,随着采集的数据不断的填充,查询的效率越来越慢(现有的SQL Server查询已经需要数十秒钟的时间),看看有没有优化的方案。 考虑过S…

解决webpack打包生成gz格式css/js文件没法在nginx使用的问题--全网唯一正确

本文绝对是全网解决这个问题唯一正确的文章,没有之一! 很多人都说开启nginx gzip压缩,这些人完全是胡说八道!你们到底懂不懂叫gzip压缩啊?! 不信你就试试,如果css/js只有gz文件,ng…

国外客户跟我要佣金,该给不该给?

“Jack,这次你要是不帮我,我就死定了!” 收到美国公司采购Antony的信息时,我有些哭笑不得,因为在我电脑屏幕上除了他的信息外,还有来自他公司监察部门的邮件: “jack先生,我们调查…

Java+SSM springboot+MySQL家政服务预约网站设计en24b

随着社区居民对生活品质的追求以及社会老龄化的加剧,社区居民对家政服务的需求越来越多,家政服务业逐渐成为政府推动、扶持和建设的重点行业。家政服务信息化有助于提高社区家政服务的工作效率和质量。 本次开发的家政服务网站是一个面向社区的家政服务网…

osgSim扩展库

1.osgSim扩展库 osgSim是0SG的一个工具箱(NodeKit),提供了仿真系统中以及染OpenFlight 数据库所需的特殊渲染功能,如地形高程图、光点节点和 DOF 变换节点等。 下面对一些可能会用到的类进行简单介绍。 1.1 DOFTransform类 osgSim::DOFTransform类是对 …

冒泡排序算法是对已知的数列进行从小到大的递增排序。

题目描述冒泡排序算法是对已知的数列进行从小到大的递增排序每个实例输出两行,第一行输出第1轮结果, 第二行输出最终结果 它的排序方法如下: 1.对数列从头开始扫描,比较两个相邻的元素,如果前者大于后者,则交换两者位置 2.重复步骤1,直到没有…

智能优化算法应用:基于旗鱼算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于旗鱼算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于旗鱼算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.旗鱼算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

go学习之json和单元测试知识

文章目录 一、json以及序列化1.概述2.json应用场景图3.json数据格式说明4.json的序列化1)介绍2)应用案例 5.json的反序列化1)介绍2)应用案例 二、单元测试1.引子2.单元测试-基本介绍3.代码实现4.单元测试的细节说明5.单元测试的综…

希亦、追觅和添可洗地机哪个好?3款热门洗地机测评

洗地机因为自身的超强清洁效果,能大大的降低家务清洁工作,所以近年来以及越来越成为家庭的标配家电。 地机选起来让人眼花缭乱,对于消费者来说,如何选择一台实用性价比高的洗地机已经是一个头疼的问题,看着宣传画面很…

【玩转 EdgeOne】| 腾讯云下一代边缘加速CDN EdgeOne 是安全加速界的未来吗?

目录 前言边缘加速与安全加固边缘计算与CDN的融合EdgeOne优秀的安全特性EdgeOne卓越的性能表现灵活的配置和管理生态系统的支持与发展技术创新与未来展望EdgeOne试用结束语 前言 在当下互联网的迅猛发展的时刻,云计算和边缘计算技术的快速发展为网络加速领域带来了…

10-微信小程序 图片 相机 二维码 动画相关API(实现选择相册、拍照、录像、动画)

10-微信小程序 图片 相机 二维码 动画相关API(实现选择相册、拍照、录像、动画) 文章目录 10.1选择图片wx.chooseImage(Object object)object.success 回调函数代码效果 10.2 预览图片wx.previewImage(Object object)代码效果 10.3 相机APICameraContext wx.createCameraContex…

Python基础学习之包与模块详解

文章目录 前言什么是 Python 的包与模块包的身份证如何创建包创建包的小练习 包的导入 - import模块的导入 - from…import导入子包及子包函数的调用导入主包及主包的函数调用导入的包与子包模块之间过长如何优化 强大的第三方包什么是第三方包如何安装第三方包 总结关于Python…

互联网计算机 IC 生态发展大揭秘,DFINITY 官方扶持计划全公开!

DFINITY 团队致力于推动去中心化的互联网计算机(IC)生态发展,拥有来自斯坦福大学、耶鲁大学、Google 等多领域专家,旨在建立高性能、低成本、开发者友好的生态系统。全球首个官方 DFINITY 实战指南现已上线,将带领更多…

Python面向对象之成员相关知识总结

文章目录 前言一、成员1.1 变量1.2 方法1.3 属性 二、成员修饰符三、对象嵌套四、特殊成员关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面…

如何使用内网穿透实现无公网ip环境访问VScode远程开发

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…