项目设计---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来说,会有多个生产者推送消息,会有多个消费者消费消息。我们就需要中间人来对消息进行管理实现消息的推送和转发。
在这里插入图片描述
借鉴于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.mzph.cn/news/186412.shtml

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

相关文章

利润大增,MAU膝斩,谋求转型的新氧头顶“荆棘王冠”

撰稿|行星 来源|贝多财经 近日,医疗美容服务平台新氧科技(NASDAQ:SY,下称“新氧”)发布了2023年第三季度未经审计的财务业绩报告。 财报显示,新氧于2023年第三季度实现收入3.85亿元,同比增长19.2%&#x…

【redis数据结构和高性能原理】

文章目录 Redis的单线程和高性能Redis是单线程吗?Redis 单线程为什么还能这么快?Redis 单线程如何处理那么多的并发客户端连接? Redis的单线程和高性能 Redis是单线程吗? Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是…

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

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

Linux下查看目录大小

查看目录大小 Linux下查看当前目录大小,可用一下命令: du -h --max-depth1它会从下到大的显示文件的大小。

WARNING: Access control is not enabled for the database.

MongoDB shell version v3.4.24 WARNING: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted. 1)未启用访问控制 2)读写访问不受限制 D:\MongoDB\Server\3.4\bin>mongo MongoDB shell version v3.4.24 c…

【Vulnhub 靶场】【DriftingBlues: 9 (final)】【简单】【20210509】

1、环境介绍 靶场介绍:https://www.vulnhub.com/entry/driftingblues-9-final,695/ 靶场下载:https://download.vulnhub.com/driftingblues/driftingblues9.ova 靶场难度:简单 发布日期:2021年05月09日 文件大小:738 …

2023.11.27 滴滴P0级故障或为k8s升级造成

滴滴11.27 P0级故障|打车|宕机|网约车|出租车|滴滴出行|系统故障_网易订阅 (163.com) 如何看待滴滴11月27日故障,对日常生产生活有哪些影响? - 知乎 (zhihu.com) 最新消息滴滴P0故障原因,是由于k8s集群升级导致的,后面又进行版本…

每日OJ题_算法_滑动窗口①_力扣209. 长度最小的子数组

力扣209. 长度最小的子数组 209. 长度最小的子数组 - 力扣(LeetCode) 难度 中等 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &…

【JavaEE】多线程 -- 死锁问题

目录 1. 问题引入 2.死锁问题的概念和原因 3. 解决死锁问题 1. 问题引入 在学习死锁之前, 我们先观察下面的代码能否输出正确的结果: 运行程序, 能正常输出结果: 这个代码只管上看起来, 好像是有锁冲突的, 此时的 locker 对象已经是加锁的状态, 在尝试对 locker 加锁, 不应该…

常用Java开发规范整理

常用Java开发规范整理 命名时 接口类中的方法和属性不要加任何修饰符号( public 也不要加),保持代码的简洁性,并加上有效的 javadoc 注释代码中相同意义的概念的单词可能有多种,在业务中应该统一禁止中英文混合使用 …

使用 OpenTelemetry 和 Golang

入门 在本文中,我将展示你需要配置和处理统计信息所需的基本代码。在这个简短的教程中,我们将使用 Opentelemetry 来集成我们的 Golang 代码,并且为了可视化,我们将使用 Jeager。 在开始之前,让我简要介绍一下什么是 …

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

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

中国毫米波雷达产业分析4——毫米波雷达企业介绍

一、矽典微 (一)公司简介 矽典微致力于实现射频技术的智能化,专注于研发高性能无线技术相关芯片,产品广泛适用于毫米波传感器、下一代移动通信、卫星通信等无线领域。 整合自身在芯片、系统、软件、算法等领域的专业能力&#xf…

C++学不会?一篇文章带你快速入门

1. 命名空间 1.1 命名空间的概念 C命名空间是一种用于避免名称冲突的机制。它允许在多个文件中定义相同的函数、类或变量,而不会相互干扰。 1.2 命名空间的定义 namespace是命名空间的关键字,后面是命名空间的名字,然后后面一对 {},{}中即…

【论文速递】:老驾驶员轨迹数据中的异常行为检测

给定道路网络和一组轨迹数据,异常行为检测 (ABD) 问题是识别在行程中表现出明显方向偏差、急刹车和加速的驾驶员。ABD 问题在许多社会应用中都很重要,包括轻度认知障碍 (MCI) 检测和老年驾驶员的安全路线建…

物联网技术发展

▶1、物联网的发展 2005年,国际电信联盟(ITU)发布了《ITU互联网报告2005:物联网》报告,正式提出了物联网(IOT)的概念。ITU报告指出:无所不在的“物联网”通信时代即将来临,世界上所有的物体(从轮胎到牙刷、从房屋到纸巾)都可以通…

Redis未授权访问-CNVD-2019-21763复现

Redis未授权访问-CNVD-2019-21763复现 利用项目: https://github.com/vulhub/redis-rogue-getshell 解压后先进入到 RedisModulesSDK目录里面的exp目录下,make编译一下才会产生exp.so文件,后面再利用这个exp.so文件进行远程代码执行 需要p…

Python基础语法之学习字符串格式化

Python基础语法之学习字符串格式化 一、代码二、效果 一、代码 # 通过m.n控制 a 123 b 123.444 c 123.555 print("限制为5:%5d" % a) print("限制为2:%2d" % a) print("限制为5.2:%5.2f" % b) print("限制为5.2:%5.2f" % c)二、效…

c++的文件读写

#include<iostream> #include<string> //1&#xff1a;引入头文件 #include<fstream> using namespace std; //把程序中的信息输出到缓冲区&#xff0c;然后写到文件 void test01() {//2:定义流对象ofstream ofs;//3:打开文件&#xff0c;以写的方式打开&…

ubuntu离线安装包

方便快捷方式 查看依赖 apt-cache depends 包名(gcc或language-pack-zh-hans)下载deb及其依赖包 # 下载.deb包到指定目录 cd /var/cache/apt/archives apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-repl…