模拟实现消息队列项目(系列2) -- 项目前期的准备

news2024/11/25 16:50:38

目录

前言

1. 需求分析

1.1 核心概念

1.2 核心API

1.3 交换机类型 

1.4 持久化

1.5 网络通信

1.6 消息应答

 2. 模块划分

结语


前言

        我们在上一个系列对于消息队列有了初步的认识,那我们明白了消息队列的用途之后,我们就开始进行我们的项目了,首先我们的项目是仿照RabbitMQ进行实现的,但是有些功能我们没有实现,毕竟RabbitMQ是一个经典的消息队列,要想自己完全实现,还是有一定程度的难度的.但是我们项目实现的这些功能肯定能帮助我们深刻理解消息队列这个组件的.当我们完成这个项目的时候,回过头来再看别的消息队列,也会有很大的帮助.

        本章是对我们的项目做一些前期的准备.主要涵盖需求分析模块划分两个部分.本项目的配置环境为:SpringBoot2系列以及Java8版本,相关依赖框架会涉及到MyBatis和sqlite数据库.


1. 需求分析

1.1 核心概念

有关消息队列的核心概念,在上节已经简单的总结过了,我们这里再简单的回顾一下.

1. 生产者(Producer) 

2. 消费者(Consumer)

3. 中间人(Broker)

4. 发布(Publish)

5. 订阅(Subscribe)

一个生产者一个消费者

 多个生产者多个消费者

Broker内部结构,依次为: 消息队列 虚拟主机 交换机 队列 绑定  

以上的所有概念,即需要在内存中存储,也需要在硬盘中存储

1. 内存存储: 执行效率快,方便我们使用

2. 硬盘存储: 重启消息队列服务器,数据不会发生丢失,可以恢复到内存中.

1.2 核心API

对于Broker来说,我们要通过这些API来实现消息队列的基本功能.

         此外我们这个消息队列支持跨主机进行使用的,那么生产者和消费者是通过网络的方式调用消息队列的这些API的.其中我们对于虚拟主机的设计只设置了一个虚拟主机在消息队列中,而RabbitMQ是支持多个虚拟主机的,同时支持虚拟主机的创建和删除.

1.3 交换机类型 

        对于交换机我们此项目实现了三种类型的交换机,而原来的RabbitMQ是支持四种交换机类型的:

1. Direct(直接交换机)

2. Fanout(扇形交换机)

3. Topic(主题交换机)

4. Header(头交换机)(未实现:比较复杂,并且用的比较少见)

 主题交换机会将message1添加到Queue2中,将message2添加到Queue2中.

1.4 持久化

Exchange,Queue,Binding,Message都有持久化的属性.我们设计的的时候给出持久化属性.

当程序重启后/主机重启,保证数据的不丢失.

1.5 网络通信

        生产者和消费者都是客户端的程序,Broker是服务器,我们的程序支持跨主机使用,使用网络进行通信,在网络通信的过程中没客户端要实现API进行远程操作服务器.

 我们在Broker的基础上,客户端要增加网络连接Connection和Channel操作

 下面网线就能很形象的表示Connection和Channel之间的关系.

1.6 消息应答

为了保证消息是否被消费者消费,消费者需要进行应答.

 2. 模块划分

 以上是整个消息队列项目所有的模块,其中有关数据的存储,我们会将交换机 队列 绑定 存储在数据库,消息存储在本地文件中.其中对以上信息也存储在内存,在内存中存储的是这些对象的引用,保证我们更快的操作数据.


结语

        本节为我们的项目开了个头,做了很多的铺垫工作,我们要明白这些工作是很有必要的,在以后的工作中,我们一定要把整个项目的实现思路捋清楚了,再开始写代码,这样我们的工作会事半功倍的.我们接下来就会进入到代码的部分,请大家多多关注后续系列,谢谢!!!

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

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

相关文章

机器学习参数调优

手动调参 分析影响模型的参数,设计步长进行交叉验证 我们以随机森林为例: 本文将使用sklearn自带的乳腺癌数据集,建立随机森林,并基于泛化误差(Genelization Error)与模型复杂度的关系来对模型进行调参&…

数据库SQL优化技巧

作为程序员,主要的工作任务就是curd,和数据库打交道是无可避免的。掌握一些数据库的优化技巧是非常有必要的 一、减少数据访问 1、使用索引   索引的原理是利用额外的空间建立了一个平衡的搜索树,大大缩短了查询的时间,使得查…

鉴源实验室丨SOME/IP协议安全攻击

作者 | 张昊晖 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 引 言 随着汽车行业对于数据通信的需求不断增加,SOME/IP作为支持汽车以太网进程和设备间通信的一种通信协议应…

echarts中如何给柱状图增加滚动条

需求:当后台传递过来的数据过多的时候 页面的柱图就会很拥挤 如下图: 所以我们需要有一个横向的滚动条,让所有的柱子都能够展示 1.echarts中有一个dataZoom属性 可以给图形增加一个横向的滚动条 dataZoom:[ {type: slider, //滑动条型数据区域缩放组件realtime: true, //拖动…

第6章 C控制语句:循环

本章介绍以下内容&#xff1a; 关键字&#xff1a;for、while、do while 运算符&#xff1a;<、>、>、<、!、、、*、-、/、% 函数&#xff1a;fabs() C语言有3种循环&#xff1a;for、while、do while 使用关系运算符构建控制循环的表达式 其他运算符 循环常用的数…

Linux tun虚拟网卡通信初识

什么是linux tun设备 Linux TUN 设备是一种虚拟网络设备&#xff0c;用于在用户空间和内核空间之间建立数据通道&#xff0c;使用户空间程序可以通过这个设备与内核网络栈进行交互。TUN 设备是一种通用的网络隧道设备&#xff0c;常用于实现虚拟专用网络&#xff08;VPN&#…

适配器模式-java实现

意图 复用已经存在的接口&#xff0c;与所需接口不一致的类。即将一个类&#xff08;通常是旧系统中的功能类&#xff09;&#xff0c;通过适配器转化成另一个接口的实现。&#xff08;简单来说&#xff0c;就是复用旧系统的功能&#xff0c;去实现新的接口&#xff09; 我们举…

Python Web开发 Jinja2模板引擎

在之前的文章中&#xff0c;简单介绍了Python Web开发框架Flask&#xff0c;知道了如何写个Hello World&#xff0c;但是距离用Flask开发真正的项目&#xff0c;还有段距离&#xff0c;现在我们目标更靠近一些 —— 学习下Jinja2模板。 模板的作用 模板是用来做什么的呢&…

C 语言高级3--函数指针回调函数,预处理,动态库的封装

目录 1.函数指针和回调函数 1.1 函数指针 1.1.1 函数类型 1.1.2 函数指针(指向函数的指针) 1.1.3 函数指针数组 1.1.4 函数指针做函数参数(回调函数) 2.预处理 2.1 预处理的基本概念 2.2 文件包含指令(#include) 2.2.1 文件包含处理 2.2.2 #incude<>和#include&q…

数据结构:栈的实现(C实现)

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》 文章目录 前言一、栈的实现思路1. 结构的定义2. 初始化栈(StackInit)3. 入栈(StackPush)4. 出栈(StackPop)5. 获取栈顶元素(StackTop)6. 检查栈是否为空(StackEmpty)7. 销毁栈(StackDestroy) 二、…

踩坑 视觉SLAM 十四讲第二版 ch13 编译及运行问题

一、安装Geset 库 sudo apt-get install libgtest-dev cd /usr/src/gtest sudo mkdir build cd build sudo cmake .. //一定要以sudo的方式运行&#xff0c;否则没有写入权限 sudo make //这个也一样要以sudo的方式 sudo cp libgtest*.a /usr/local/lib //将生成…

python表白代码大全可复制,python表白代码大全简单

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python表白代码大全可复制&#xff0c;python表白程序代码完整版&#xff0c;现在让我们一起来看看吧&#xff01; 今天是20230520&#xff0c;有人说&#xff1a;5代表的是人生五味&#xff0c;酸甜苦辣咸&#xff1b;…

设备管理平台:采用以可靠性为中心的维护策略的优势

在如今的工业领域&#xff0c;以可靠性为中心的维护策略正逐渐成为企业数字化转型的核心。无论是混合还是离散自动化应用&#xff0c;优化维护和工作流程实践已经成为提高利润、降低停机时间、增强运营和生产性能的不可或缺的一环。在这个过程中&#xff0c;设备管理系统与物联…

Harbor部署--使用 Harbor 安装包

一、Harbor安装准备条件 这里以 harbor 2.8.3 版本为例 1.1 硬件要求 Harbor 安装对硬件资源CPU、内存和硬盘的要求如下表&#xff1a; 资源 最小要求 推荐配置 CPU 2 CPU 4 CPU Mem 4 GB 8 GB Disk 40 GB 160 GB 使用如下命令分别查看服务器的物理CPU和逻辑CPU个数…

LCD1602相关

一.概述 LCD1602是一种工业字符型液晶&#xff0c;能够同时显示16*02即32字符&#xff08;16列2行&#xff09; 二.引脚接口说明表 第 1 脚 : VSS 为电源地 第 2 脚 : VDD 接 5V 正电源 第 3 脚 : VL 为液晶显示器对比度调整端 , 接正电源时对比度最弱&#xff…

第三章 图论 No.8最近公共祖先lca, tarjan与次小生成树

文章目录 lcaTarjan板子题&#xff1a;1172. 祖孙询问lca或tarjan&#xff1a;1171. 距离356. 次小生成树352. 闇の連鎖 lca O ( m l o g n ) O(mlogn) O(mlogn)&#xff0c;n为节点数量&#xff0c;m为询问次数&#xff0c;lca是一种在线处理询问的算法 自己也是自己的祖先 倍…

XML方式AOP快速入门XML方式AOP配置详解

目录 1.XML方式AOP快速入门 1&#xff1a;导入AOP相关坐标 2&#xff1a;准备目标类&#xff0c;准备增强类&#xff0c;并配置给Spring管理 3&#xff1a;配置切点表达式&#xff08;那些方法要被增强&#xff09; 4&#xff1a;配置织入&#xff08;切点被哪些方法增强&…

漫画算法做题笔记

诸神缄默不语-个人CSDN博文目录 哦这是我三年前写的&#xff0c;我现在Java语法都快忘光了…… 反正之前的博文也发一下好了。这个因为我当年是用有道云笔记而不是直接用CSDN编辑器写的&#xff0c;所以后面有些内容写乱了&#xff0c;因为我现在猛的一看有点看不懂&#xff0…

一文读懂|RDMA原理

什么是DMA DMA全称为Direct Memory Access&#xff0c;即直接内存访问。意思是外设对内存的读写过程可以不用CPU参与而直接进行。我们先来看一下没有DMA的时候&#xff1a; 无DMA控制器时I/O设备和内存间的数据路径 假设I/O设备为一个普通网卡&#xff0c;为了从内存拿到需要…

事务的隔离级别与Spring事务的传播机制

目录 事务的隔离性 事务的隔离级别 读未提交 读已提交 可重复读 串行化 Spring事务的传播机制 支持当前事务 不支持当前事务 嵌套事务 事务的隔离性 事务的隔离性是事务的四大特性之一&#xff0c;数据库允许多个事务并发操作数据&#xff0c;为了尽可能地避免并发操…