RabbitMQ 模拟实现【一】:需求分析

news2024/11/15 11:14:30

文章目录

  • 消息队列
    • 消息队列
    • 消息队列的作用
    • 图解生产者消费者模型
    • BrokerSever 内部涉及的关键概念
    • 交换机功能
    • 消费的实现方式
    • 数据存储方式
    • 网络通信
    • 消息应答模式

消息队列模拟实现Gitee网址

消息队列

采用 SpringBoot 框架实现

消息队列

通常说的消息队列,简称MQ(Message Queue),指的就是消息中间件。简单理解为一个使用阻塞队列来通信的组件,本质上就是个转发器,包含发消息,存消息,消费消息的过程。他是一种⽣产者消费模型 (进程和进程之间/服务和服务之间)

消息队列的作用

  • 解耦合
    • 本来有个分布式系统,A服务器 调⽤ B服务器(A给B发请求,B给A返回响应)===》 A 和 B 的耦合是⽐较⼤的!
    • 引⼊消息队列后,A把请求发送到消息队列,B再从消息队列获取到请求,将 A 与 B 之间的耦合程度降低(追求高内聚、低耦合)
  • 削峰填⾕
    • ⽐如A是⼊⼝服务器,A 调⽤ B 完成⼀些具体业务,如果是 A 和 B 直接通信,如果突然A 收到⼀组⽤户的请求的峰值,此时 B 也会随着受到峰值~
    • 引⼊消息队列后,A把请求发送到消息队列,B再从消息队列获取到请求。 (虽然A收到很多请
      求,队列也收到了很多请求,但是B仍旧可以按照原来的节奏处理请求。不⾄于说⼀下就收到太
      多的并发量而导致服务器 B 奔溃)

图解生产者消费者模型

在这里插入图片描述
结合实际,我们多使用消息队列在分布式系统中,一对一或者一对多的关系无法满足我们服务器对于消息队列的需求,因此以多对多的方式来实现

BrokerSever 内部涉及的关键概念

  • 虚拟主机(Virtual Host):可以看做一个“逻辑”上的数据集合
  • 交换机(Exchange):生产者把消息投递到 BrokerSever 实际上是先把消息交给 BrokerSever 上的某个交换机,再有交换机把消息转发给对应的队列(类似“前台”)
  • 队列(Queue):真正用来存储处理消息的实体后续消费者也是从对应的队列中去数据,大队 列中也可以有很多小的队列
  • 绑定(Bingding):把交换机和队列建立起关联关系(交换机和队列视为“多对多”关系)
  • 消息(Message):具体来说,可以认为是服务器 A 给 B 发的请求(通过MQ转发)就是一个消息,服务器 B 给 A 返回的响应,,也可看做是一个消息,消息可以视为一个字符串(二进制数据)

交换机功能

交换机类型:用于描述不同的转发规则

1 Direct 直接交换机:

  • 生产者发送消息的时候会指定一个“目标队列”的名字
  • 交换机收到以后就看看绑定的队列里有没有匹配的队列~
  • 如果有,转发过去(把消息塞进对应的队列中)如果没有则直接丢弃

2 Fanout 扇出交换机:

  • 把消息放到交换机绑定的每个队列
  • 只要和这个交换机绑定任何队列都会转发消息

3 Topic 主题交换机:

  • bindingKey.把队列和交换机绑定的时候,指定一个单词,暗号~
  • routingKey.生产者发送消息时,也指定一个单词
  • 如果 bindingKey 和 routingKey 对上暗号~~此时就可以把这个消息转发到对应的队列中

消费的实现方式

此处采用 推 的实现方式:Broker把收到的数据主动发送给订阅的消费者(订阅:哪些消费者要从中间人这里取数据,这个注册的过程,称为“订阅”)

数据存储方式

数据的存储主要有两点需要注意:持久化 + 高效,因此采用 内存 + 硬盘 的方式来存储

  • 内存:高效的转发处理数据,效率高
  • 硬盘:防止在内存中的数据随着进程重启/主机重启而丢失

网络通信

此处的目的是让客户端通过网络调用 BrokerSever 提供的编程接口,采用 TCP + 自定义的应用层协议 来实现生产者/消费者模型,如下图解所示:
在这里插入图片描述

消息应答模式

根据需求不同,此处有两种方式实现消息应答:

  1. ⾃动应答,消费者把这个消息取⾛了,就算应答了
  2. ⼿动应答,basicAck ⽅法属于⼿动应答(消费者需要主动调⽤这个 API 来进⾏应答)

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

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

相关文章

AP AUTOSAR 执行管理与状态管理的交互

本系列文章将从以下六个方面来介绍AP平台核心技术: 接下来,让我们来看第4个部分: 第四部分 执行管理与状态管理的交互 4.1 执行管理与状态管理的交互

这个班要不还是别上了吧。

先不提代码写得对不对。咱就是说,打印语句都出不来,搞个chuanchuan哟。 (谁能给我解释一下。。🙃)

Stable Diffusion 模型下载:Juggernaut(主宰、真实、幻想)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 该模型是一个真实模型,并且具有幻想和创意色彩。 作者述:我选取了…

腾讯t-design 实现图片预览组件的显示和使用

腾讯t-design 发布了 下面介绍一个组件的使用 图片预览 <template><div><div class"tdesign-demo-image-viewer__base"><t-image-viewer :images"[img]"><template #trigger"{ open }"><div class"tde…

【智能算法】非洲秃鹫优化算法(AVOA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2021年&#xff0c;Abdollahzadeh等人受到非洲秃鹫自然捕食行为启发&#xff0c;提出了非洲秃鹫优化算法(African Vultures Optimization Algorithm, AVOA)。 2.算法原理 2.1算法思想 AVOA模拟了…

13.WEB渗透测试--Kali Linux(一)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;12.WEB渗透测试-Linux系统管理、安全加固&#xff08;下&#xff09;-CSDN博客 kali由 Of…

python爬虫实战——抖音

目录 1、分析主页作品列表标签结构 2、进入作品页前 判断作品是视频作品还是图文作品 3、进入视频作品页面&#xff0c;获取视频 4、进入图文作品页面&#xff0c;获取图片 5、完整参考代码 6、获取全部作品的一种方法 本文主要使用 selenium.webdriver&#xff08;Firef…

【js刷题:数据结构数组篇之移除元素】

移除元素 一、题目二、思路三、方法1.暴力解法2.双指针法定义快指针和慢指针代码展示 三、力扣刷题1.删除排序数组中的重复项 一、题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额…

vivo统一接入网关VUA转发性能优化实践

作者&#xff1a;vivo 互联网服务器团队 - Qiu Xiangcun 本文将探讨如何通过使用Intel QuickAssist Technology&#xff08;QAT&#xff09;来优化VUA的HTTPS转发性能。我们将介绍如何使用QAT通过硬件加速来提高HTTPS转发的性能&#xff0c;并探讨QAT在不同应用场景中的表现。最…

重学SpringBoot3-内容协商机制

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-内容协商机制 ContentNegotiationConfigurer接口配置内容协商URL参数Accept头使用Url扩展名 自定义内容协商格式步骤1: 注册自定义媒体类型步骤2: 实现H…

AI实战:借助Python与PaddleOCR,实现高精度文本检测与识别

1、引言 欢迎来到今天的教程&#xff1a;“驾驭PaddleOCR&#xff0c;解锁Python文字识别新技能”。在本篇文章中&#xff0c;我们将手把手教你如何安装及使用这款强大的Python库&#xff0c;轻松应对各类图像中的文字识别问题。 2、安装PaddleOCR 首先确保你的环境中已安装…

苹果电脑下载crossover对电脑有影响吗 crossover mac 好用吗CrossOver虚拟机 CrossOver打游戏

苹果电脑下载crossover对电脑有影响吗&#xff1f; 在苹果电脑下载安装crossover对电脑没有什么影响&#xff0c;并且可以解决macOS系统不能安装Windows应用程序的问题。相较于虚拟机和双系统而言&#xff0c;crossover安装软件更简单&#xff0c;占用内存也更小。下面我们来看…

Css基础——精灵图(sprites)和字体图标

1、精灵图 1.1、精灵图的由来 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送 请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度。 因此&#xff0c;为了有效地减…

可行性研究报告模板

1业务需求可行性分析 2技术可行性分析 2.1规范化原则 2.2高度的兼容性和可移植性 2.3人性化、适用性 2.4标准化统一设计原则 2.5先进安全可扩展性原则 3开发周期可行性分析 4人力资源可行性分析 5成本分析 6收益分析 7结论 软件项目全套资料获取下载&#xff1a;软件开发全套资…

链路聚合练习

下面的接口都改为Etherent [LSW1]int Eth-Trunk 1 创建一个eth-trunk 1[LSW1-Eth-Trunk1]int g0/0/1[LSW1-GigabitEthernet0/0/1]eth-trunk 1 将接口0/0/1加入eth-trunk 1[LSW1-GigabitEthernet0/0/1]int g0/0/2[LSW1-GigabitEthernet0/0/2]eth-trunk 1[LSW1-GigabitEthernet…

CAQ六西格玛绿带认证流程:从能力考试到评价全解析

六西格玛绿带认证&#xff0c;作为质量管理领域的一个重要里程碑&#xff0c;对于专业人士来说是一项极具价值的认证。张驰咨询将详细解读这一流程&#xff0c;包括理论知识考试、项目实践能力评价&#xff0c;以及期满换证的相关细节。 一、理论知识考试 六西格玛绿带的理论…

OpenAI机器人,一出手就是王炸

「借助 OpenAI 的能力&#xff0c;Figure 01 现在可以与人全面对话了&#xff01;」 本周三&#xff0c;半个硅谷都在投的明星机器人创业公司Figure&#xff0c;发布了自己第一个 OpenAI 大模型加持的机器人 demo。 这家公司在 3 月 1 日刚刚宣布获得 OpenAI 等公司的投资&…

论文阅读——VSA

VSA: Learning Varied-Size Window Attention in Vision Transformers 方法&#xff1a; 给定输入特征X&#xff0c;VSA首先按照基线方法的例程&#xff0c;将这些标记划分为几个窗口Xw&#xff0c;窗口大小为预定义的w。我们将这些窗口称为默认窗口&#xff0c;并从默认窗口中…

(一)搭建Android Studio开发环境

一、JDK 1、下载 2、安装 双击进行安装&#xff0c;修改安装路径为&#xff1a;D:\Java\jdk-17.0.4.1即可&#xff0c;安装完成后目录如下&#xff1a; 配置环境变量 3、测试 WinR&#xff0c;输入cmd&#xff0c;按Enter后&#xff0c;键入&#xff1a;java --version&…

面试经典-18-合并两个有序链表

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 解 class Solution {// 成功public ListNode mergeTwoLists(ListN…