【消息队列开发】 背景知识与需求分析

文章目录

  • 🍃前言
  • 🌲消息队列背景知识
  • 🌳需求分析
    • 🚩核心概念
    • 🚩核心API
    • 🚩交换机类型(Exchange Type)
    • 🚩持久化
    • 🚩网络通信
    • 🚩消息应答
    • 🚩模块划分
  • ⭕总结

🍃前言

博主将从零开始开发一个消息队列的项目,今天是项目的第一天。

今天我们的任务有以下两点:

  1. 了解消息队列的背景知识
  2. 对该项目进行需求分析,为后续开发项目有一个前进的方向

🌲消息队列背景知识

在实际的后端开发中,尤其是分布式系统⾥,跨主机之间使⽤⽣产者消费者模型,也是⾮常普遍的需求.

因此,我们通常会把阻塞队列,封装成⼀个独⽴的服务器程序,并且赋予其更丰富的功能.

这样的程序我们就称为消息队列(Message Queue, MQ)

市面上成熟的消息队列⾮常多.

  • RabbitMQ
  • Kafka
  • RocketMQ
  • ActiveMQ

其中,RabbitMQ 是⼀个非常知名,功能强⼤,⼴泛使⽤的消息队列.

这里咱们就仿照RabbitMQ,模拟实现⼀个简单的消息队列.

🌳需求分析

我们先来理解一下几个核心概念

🚩核心概念

  • 生产者(Producer)

  • 消费者(Consumer)

  • 中间⼈(Broker)

  • 发布(Publish)

  • 订阅(Subscribe)

几者关系如下图所示:

⼀个生产者,⼀个消费者
在这里插入图片描述

N个生产者,N个消费者

在这里插入图片描述
其中,Broker是最核心的部分.负责消息的存储和转发.

在Broker中,⼜存在以下概念.

  • 虚拟机(VirtualHost):类似于MySQL的"database",是⼀个逻辑上的集合.⼀个BrokerServer上可以存在多个VirtualHost.

  • 交换机(Exchange):生产者把消息先发送到Broker的Exchange上.再根据不同的规则,把消息转发给不同的Queue.

  • 队列(Queue):真正⽤来存储消息的部分.每个消费者决定自己从哪个Queue上读取消息.

  • 绑定(Binding):Exchange和Queue之间的关联关系.Exchange和Queue可以理解成"多对多"关系.使用⼀个关联表就可以把这两个概念联系起来.

  • 消息(Message):传递的内容.

所谓的Exchange和Queue可以理解成"多对多"关系,和数据库中的"多对多"⼀样.
意思是:⼀个Exchange可以绑定多个Queue(可以向多个Queue中转发消息).
⼀个Queue也可以被多个Exchange绑定(⼀个Queue中的消息可以来⾃于多个Exchange).

上述几个核心概念关系如下图所示:
在这里插入图片描述
这些概念,既需要在内存中存储,也需要在硬盘上存储,原因如下:

  • 内存存储:⽅便使⽤.
  • 硬盘存储:重启数据不丢失.

针对不同的要求不同,所以存储概念也不同

🚩核心API

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

  1. 创建队列(queueDeclare)
  2. 销毁队列(queueDelete)
  3. 创建交换机(exchangeDeclare)
  4. 销毁交换机(exchangeDelete)
  5. 创建绑定(queueBind)
  6. 解除绑定(queueUnbind)
  7. 发布消息(basicPublish)
  8. 订阅消息(basicConsume)
  9. 确认消息(basicAck)

后面我们进行一一实现

🚩交换机类型(Exchange Type)

对于 RabbitMQ 来说,主要支持四种交换机类型.

  • Direct
  • Fanout
  • Topic
  • Header

其中Header这种方式比较复杂,比较少见.常⽤的是前三种交换机类型.咱们此处也主要实现以下这三种.

  • Direct:生产者发送消息时,直接指定被该交换机绑定的队列名.
  • Fanout:生产者发送的消息会被复制到该交换机的所有队列中.
  • Topic:绑定队列到交换机上时,指定⼀个字符串为bindingKey.发送消息指定⼀个字符串为routingKey.当routingKey和bindingKey满⾜⼀定的匹配条件的时候,则把消息投递到指定队列

🚩持久化

Exchange,Queue,Binding,Message都有持久化需求.

当程序重启/主机重启,保证上述内容不丢失.

🚩网络通信

生产者和消费者都是客⼾端程序,broker则是作为服务器.通过网络进⾏通信.

在网络通信的过程中,客⼾端部分要提供对应的api,来实现对服务器的操作.

  1. 创建 Connection
  2. 关闭 Connection
  3. 创建 Channel
  4. 关闭 Channel
  5. 创建队列(queueDeclare)
  6. 销毁队列(queueDelete)
  7. 创建交换机(exchangeDeclare)
  8. 销毁交换机(exchangeDelete)
  9. 创建绑定(queueBind)
  10. 解除绑定(queueUnbind)
  11. 发布消息(basicPublish)
  12. 订阅消息(basicConsume)
  13. 确认消息(basicAck)

可以看到,在broker的基础上,客户端还要增加Connection操作和Channel操作.

Connection对应⼀个TCP连接.

Channel则是Connection中的逻辑通道.

⼀个Connection中可以包含多个Channel.

Channel和Channel之间的数据是独立的.不会相互干扰.

这样的设定主要是为了能够更好的复用TCP连接,达到⻓连接的效果,避免频繁的创建关闭TCP连接.

Connection可以理解成⼀根网线.Channel则是网线里具体的线缆.
在这里插入图片描述

🚩消息应答

被消费的消息,需要进行应答.

应答模式分成两种.

  • 自动应答:消费者只要消费了消息,就算应答完毕了.Broker直接删除这个消息.
  • 手动应答:消费者手动调⽤应答接⼝,Broker收到应答请求之后,才真正删除这个消息.

手动应答的目的,是为了保证消息确实被消费者处理成功了.在⼀些对于数据可靠性要求⾼的场景,比较常见

🚩模块划分

对上述所涉及到的知识点进行一个整体模块划分,如下图所示:
在这里插入图片描述

⭕总结

关于《【消息队列开发】 背景知识与需求分析》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024VLN综述(1)

1 INTRODUCTION 视觉语言导航(VLN)[12-14]作为体现智能领域的一个重要研究方向,融合了人工智能、自然语言处理、计算机视觉和机器人技术。其目的是通过理解自然语言指令和解释视觉信息,使代理能够在虚拟和真实环境中导航[15-17]。这种方法不仅为更自然、更高效的人机交互铺…

初识Jwt(结合SpringBoot)

最近接触JWT,顺便记录下 目录 JWT简介JWT组成JWT使用流程JWT实战引入Maven核心代码 JWT优缺点 JWT简介 JWT是JSON Web Token的简称,是目前流行的跨域的认证解决方案,作为传递信息的凭证,它是由服务器端签发的且是带签名的&#x…

Vue-Router学习笔记

文章目录 一、Vue Router简介二、简单使用三、动态路由匹配3.1 响应路由参数的变化3.2 捕获所有路由或 404 Not found 路由 四、路由的匹配语法4.1 在参数中自定义正则4.2 可重复的参数4.3 Sensitive 与 strict 路由配置4.4 可选参数 五、嵌套路由嵌套的命名路由 六、编程式导航…

CMAQ空气质量模式在移动源污染控制中的技术应用

CMAQ(Community Multiscale Air Quality)空气质量模式是一种先进的空气质量模拟工具,广泛应用于环境科学、气象学以及大气污染控制等领域。该模式能够综合考虑大气中各种污染物的传输、扩散、转化和沉降过程,从而实现对空气质量的…

部署MGR集群(OpenEuler版步骤详细可参考)

MGR集群理论知识: MGR具备以下几个特点: 基于shared-nothing模式,所有节点都有一份完整数据,发生故障时可以直接切换。 MGR提供了数据一致性保障,默认是最终一致性,可根据业务特征需要自行调整一致性级别…

[Prob] Definition 3.7.5 (Function of two r.v.s)

定义3.7.5(两个随机变量的函数):给定一个样本空间 \( S \) 的实验,如果 \( X \) 和 \( Y \) 是映射 到X(s) 和 Y(s) 的随机变量,那么 g(X, Y) 就是映射 s 到 g(X(s), Y(s)) 的随机变量。 请注意,我…

IEEE802.11v协议介绍

IEEE802.11v协议简介 协议全称:无线网络管理(Wireless Network Management) 批准日期:2011年2月 协议状态:并入802.11-2012 协议别名:BSS过渡管理 主要功能 支持AP和STA间交换:关于RF环境和拓扑状态的信息&#…

C#,精巧实用的代码,文件夹的时间整理工具FolderTime及其源代码

一、文件夹LastWriteTime 我们在Windows资源管理器中看到的文件夹时间,是什么时间呢? 按微软的解释,应该是该文件夹的最后写入(修改)的时间,称为 LastWriteTime。 DirectoryInfo root = new DirectoryInfo(@"c\root");DateTime ft = root.LastWriteTime; La…

C语言 ##程序填空题## 总结

以下仅个人总结。 1&#xff0c;下面程序的功能是计算1-35-7.....-99101的值&#xff0c;填空。 void main() {int i,t, s 0, sign 1;for (i 1; i < 101; i 2) {t i * sign;s t;sign -sign;}printf("%d", s); } 2&#xff0c;下面程序的功能是输出一个整…

Vue2利用创建a标签实现下载本地静态文件到本地电脑上的功能

最近PC项目遇到一个需求&#xff0c;那就是需要前端下载前端代码包里的前端文件到本地&#xff0c;并且可以给下载下来的文件名指定任意的文件名&#xff0c;如下图所示&#xff0c;在前端代码里public里的statics里有个静态文件zswj.pem&#xff0c;页面上有个下载按钮&#x…

短剧APP搭建,短剧时代下的收益方向

近年来&#xff0c;节奏快、剧情爽的短剧瞬间爆火&#xff0c;吸引了无数的观众&#xff0c;这也使得众多短剧制作商赚的盆满钵满&#xff0c;预计再过几年短剧市场规模将达到千亿元&#xff01;短剧市场的发展将不可估量。 随着各类短剧的出现&#xff0c;观众也急需观看短剧…

音视频开发_视频基础知识

RGB彩色原理 RGB 是表示红色 (Red)、绿色 (Green) 和蓝色 (Blue) 三种颜色的色彩模式&#xff0c;这是一种加色法。在 RGB 色彩模式中&#xff0c;通过不同比例的红、绿、蓝三原色的混合可以得到各种不同颜色。这是因为人眼对红、绿、蓝三种颜色特别敏感&#xff0c;通过它们的…

ArcGIS学习(十五)用地适宜性评价

ArcGIS学习(十五)用地适宜性评价 本任务给大家带来的内容是用地适宜性评价。 用地适宜性评价是大家在平时工作中最常接触到的分析场景之一。尤其是在国土空间规划的大背景下,用地适宜性评价变得越来越重要。 此外,我们之前的任务主要是使用矢量数据进行分析。本案例是主讲…

传感器是什么?有哪些类型及应用

什么是传感器 传感器是一种用于检测、测量和感知某种特定物理量或环境参数的设备或器件。它们能够将所测量的物理量转换为可供处理和分析的电信号、数字信号或其他形式的输出信号。传感器在各种领域中都有广泛的应用&#xff0c;包括工业、医疗、环境监测、汽车、航空航天、农…

Go——下划线

"_"是特殊标识符&#xff0c;用来忽略结果。 1. 下划线在import中 在golang中&#xff0c;import的作用是导入其他package。 import下划线的作用&#xff1a;当导入一个包时&#xff0c;该包下的文件里所有init()函数都会被执行&#xff0c;然而&#xff0c;有些时候…

数组扩展方法(二)

以下将对Array.prototype上的方法进行整理&#xff0c;es5中数组遍历的方法在 数组扩展方法&#xff08;一&#xff09;可以查看 会改变原始数组 以下方法都在Array.prototype原型上 push 数组尾部插入元素shift 数组首部删除元素unshift 向数组首部添加元素pop 数组尾部删除…

深入探究:AVL树的平衡之道

文章目录 一、AVL树的原理AVL树的定义和特性平衡因子的概念 二、AVL树的自平衡策略a. 单旋&#xff08;single rotation&#xff09;1. 左单旋&#xff08;Left Rotation&#xff09;&#xff1a;2. 右单旋&#xff08;Right Rotation&#xff09;&#xff1a; b. 双旋&#xf…

双向数据绑定:Vue.js的魔法背后

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【PHP+代码审计】PHP基础——流程控制

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

大规模自动化重构框架--OpenRewrite浅析

目录 1. OpenRewrite是什么&#xff1f;定位&#xff1f; 2. OpenWrite具体如何做&#xff1f; 3. 核心概念释义 3.1 Lossless Semantic Trees (LST) 无损语义树 3.2 访问器&#xff08;Visitors&#xff09; 3.3 配方&#xff08;Recipes&#xff09; 4. 参考链接 Open…