【RabbitMQ】RabbitMQ 的 6 种工作模式

RabbitMQ 的 6 种工作模式

  • 1.简单模式
  • 2.工作队列模式
  • 3.交换机模式
  • 4.Routing 转发模式
  • 5.主题转发模式
  • 6.RPC 模式
    • 6.1 消息属性
    • 6.2 关联标识
    • 6.3 工作流程
  • 7.小结

1.简单模式

生产者把消息放入队列,消费者获得消息,如下图所示。这个模式只有 一个消费者一个生产者一个队列,只需要配置主机参数,其他参数使用默认值即可通信。
在这里插入图片描述

2.工作队列模式

这种模式出现了多个消费者,如下图所示。为了保证消费者之间的负载均衡和同步,需要在消息队列之间加上同步功能。
在这里插入图片描述
工作队列(任务队列)背后的主要思想是:避免立即执行资源密集型任务(耗时),以便下一个任务执行时不用等待它完成。工作队列将任务封装为消息并将其发送到队列中。

3.交换机模式

实际上,前两种模式也使用了交换机,只是使用了采用默认设置的交换机。交换机参数是可以配置的,如果消息配置的交换机参数和 RabbitMQ 队列绑定(binding)的交换机名称相同,则转发,否则丢弃,如下图所示。
在这里插入图片描述

4.Routing 转发模式

交换机要配置为 direct 类型,转发的规则变为检查队列的 routing key 值。如果 routing key 值相同,则转发,否则丢弃,如下图所示。
在这里插入图片描述

5.主题转发模式

这种模式下交换机要配置为 topic 类型,routing key 配置失效。发送到主题交换机的信息不能是任意 routing key,它必须是一个单词的列表,用逗号分隔。特点是可以模糊匹配,匹配规则为:* 可以代替一个词;# 可以代替 0 个或更多的单词,其模式情况如下图所示。
在这里插入图片描述

6.RPC 模式

6.1 消息属性

AMQP 协议给消息预定义了一系列的 14 个属性。大多数属性很少会用到,除了以下几个:

  • delivery_mode投递模式):将消息标记为持久的(值为 2 2 2)或暂存的(除了 2 2 2 之外的其他任何值)。
  • content_type内容类型):用来描述编码的 mime-type。例如在实际使用中常常使用 application/json 来描述 JOSN 编码类型。
  • reply_to回复目标):通常用来命名回调队列。
  • correlation_id关联标识):用来将 RPC 的响应和请求关联起来。

6.2 关联标识

如果给每一个 RPC 请求新建一个回调队列。这不是一个高效的做法,幸好这儿有一个更好的办法 —— 我们可以 为每个客户端只建立一个独立的回调队列

这就带来一个新问题,当此队列接收到一个响应的时候它无法辨别出这个响应是属于哪个请求的。correlation_id 就是为了解决这个问题而来的。我们给每个请求设置一个独一无二的值。稍后,当我们从回调队列中接收到一个消息的时候,我们就可以查看这条属性从而将响应和请求匹配起来。如果我们接手到的消息的 correlation_id 是未知的,那就直接销毁掉它,因为它不属于我们的任何一条请求。

你也许会问,为什么我们接收到未知消息的时候不抛出一个错误,而是要将它忽略掉?这是为了解决服务器端有可能发生的竞争情况。尽管可能性不大,但 RPC 服务器还是有可能在已将应答发送给我们但还未将确认消息发送给请求的情况下杀掉。如果这种情况发生,RPC 在重启后会重新处理请求。这就是为什么我们必须在客户端优雅的处理重复响应,同时 RPC 也需要尽可能保持幂等性。

6.3 工作流程

这种模式主要使用在远程调用的场景下。如果一个应用程序需要另外一个应用程序来最终返回运行结果,那这个过程可能是比较耗时的操作,使用 RPC 模式是最合适的。其模式情况如下图所示。
在这里插入图片描述

  • 当客户端启动的时候,它创建一个匿名独享的回调队列。
  • 在 RPC 请求中,客户端发送带有两个属性的消息:一个是设置回调队列的 reply_to 属性,另一个是设置唯一值的 correlation_id 属性。
  • 将请求发送到一个 rpc_queue 队列中。
  • RPC 工作者(又名:服务器)等待请求发送到这个队列中来。当请求出现的时候,它执行他的工作并且将带有执行结果的消息发送给 reply_to 字段指定的队列。
  • 客户端等待回调队列里的数据。当有消息出现的时候,它会检查 correlation_id 属性。如果此属性的值与请求匹配,将它返回给应用。

7.小结

6 种工作模式的主要特点如下

  • 简单模式:只有一个生产者,一个消费者。
  • 工作队列模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。
  • 订阅模式:一个生产者发送的消息会被多个消费者获取。
  • 路由模式:发送消息到交换机,并且要指定路由 key,消费者在将队列绑定到交换机时需要指定路由 key
  • Topic 模式:根据主题进行匹配,此时队列需要绑定在一个模式上,# 匹配一个词或多个词,* 只匹配一个词。

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

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

相关文章

v8中使用TensorBoard进行训练可视化(可用于论文)(补充版,接上一篇文章)

我们可以边训练,边通过TensorBoard观察损失函数的变化,同时也可以通过TensorBoard去查看整体网络yaml结构,不再需要人工根据yaml去画网络结构了。 训练v8的时候,重新打开新的终端: 虚拟环境下输入并执行:&…

redis序列化

文章目录 1、为什么要进行序列化操作?2、序列化方式2.1、自定义序列化2. 2、StringRedisTemplate(重点) 1、为什么要进行序列化操作? 不进行序列化向redis存入数据代码: SpringBootTest class RedisDemoApplicationT…

日常销售数据分析为什么重要?三个维度全面分析日常销售数据

在当今电子商务的浪潮席卷全球的时代,网店如雨后春笋般涌现,并且竞争日趋激烈。在这样一个充满挑战与机遇的环境中,如何洞察市场动向,把握消费者需求,实现销售业绩的稳步增长,成为每一位电商运营者必须面对…

【YOLOv8改进[注意力]】在YOLOv8中添加GAM注意力 + 含全部代码和详细修改方式 + 手撕结构图

本文将进行在YOLOv8中添加GAM注意力的实践,助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法,实现有效涨点。 改进前和改进后的参数对比: 目录 一 GAM 二 在YOLOv8中添加GAM注意力 1 整体修改 2 配置文件

M41T11M6F串行实时时钟-国产兼容RS4C411

RS4C411是一款低功耗串行实时时钟(RTC),具有56字节的NVRAM。内置32.768 kHz振荡器(外部晶体控制)和RAM的前8字节用于时钟/日历功能,并以二进制编码十进制(BCD)格式配置。地址和数据通…

MacOS下如何使用Tomcat

提示:宝子们,希望文章对你们有所帮助, 请一键三连支持博主下吧~ 文章目录 前言一、Tomcat 压缩版二、Tomcat可执行文件版本最后 前言 电脑环境: MacOS Monterey 版本 12.6.8 Apple M1 Tomcat 9.0.83 Java 1.8.0_171 …

滚珠丝杆与梯形丝杆的工作原理与性能差异!

滚珠丝杆和梯形丝杆(也称滑动丝杆)都是机械设备中常见的两种精密传动元件,两者都是将旋转运动变成直线运动的方式。那么,这两者有什么区别呢?在什么时候选择使用滚珠丝杆?什么时候选用滑动丝杆呢&#xff1…

Petalinux由于网络原因产生的编译错误(3)-qemu-xilinx-system-native 失败

1 获取qemu-xilinx-system-native 失败 编译时遇到qemu-xilinx-system-native 包获取失败,如下图所示: 解决这种错误方法如下: 进入Petalinux 工程,编辑工程下的 project-spec/meta-user/conf/petalinuxbsp.conf 文件&#xff0…

CorelDRAW2024专业版永久免费激活码序列号分享大全

亲爱的设计师们,你们是否有过这样的困扰:想要设计出独具特色的图形作品,但又受限于软件的功能和操作复杂性?今天,我要为大家种草一款神器——CorelDRAW 2024!🎉✨ 作为一个长期使用这款软件的图…

并发、多线程、HTTP连接数有何关系?

在计算机领域,"并发"、"多线程"和"HTTP连接数"是三个重要的概念,它们之间存在着密切的关系。本文将探讨这三者之间的联系以及它们在现代计算机系统中的作用。 一、并发的概念 并发是指系统能够同时处理多个任务或事件的能…

英语学习笔记35——Our village

Our village 我们的村庄 词汇 Vocabulary photograph n. 照片 通常说:photo 复数:photos     picture 复数:pictures 搭配:take a photo 照相 以o结尾的单词复数es的: potato —— potatoes tomato —— tomatoe…

TCP三次握手和四次挥手过程简介(抓包分析,简单易懂,小白)

接上篇 传输层部分 链路层、网络层、传输层和应用层协议详解分析-CSDN博客文章浏览阅读689次,点赞10次,收藏15次。wireshark抓包分析-CSDN博客wireshark是网络包分析工具网络包分析工具的主要作用是尝试捕获网络包,并尝试显示包的尽可能详细…

Selective Kernel Networks(CVPR-2019)

摘要 提出了一种动态选择机制,允许每个神经元根据输入信息的多个尺度自适应调整感受野大小。设计了一种称为选择核(SK)单元的结构块,利用softmax attention 对不同核大小的多个分支进行融合。对这些分支的不同attention产生融合层…

yolov10主要特点

在我们探讨YOLOv10之前,让我们回顾一下YOLO的发展历程。YOLO在实时目标检测领域一直是先驱,兼顾速度和准确性。从YOLOv1到YOLOv9,每个版本在架构、优化和数据增强方面都引入了显著的改进。然而,随着模型的发展,某些限制…

磁盘管理 磁盘介绍 MBR

track:磁道,就是磁盘上同心圆,从外向里,依次1号、2号磁道..... sector:扇区,将磁盘分成一个一个扇形区域,每个扇区大小是512字节,从外向里,依次是1号扇区、2号扇区... cy…

【Python】Flask问答系统Demo项目

学习视频 我是跟着知了传课学的Flask,起初了解Flask还是GPT告诉我的,现在可以说用Flask做后端是真的方便! https://www.bilibili.com/video/BV17r4y1y7jJ 项目结构与下载 FlaskOA(项目文件夹) │ app.py │ conf…

智慧公安指挥中心大数据信息化两中心两基地系统方案

1.1 系统建设目标 本系统是一个汇接全市的报警求助的大型通信指挥系统,技术难度较高、可靠性要求高,技术路线的选择至关重要。 在充分考虑XX市公安局的业务需要,利用现代通信及计算机网络技术的基础上,最大程度地实现资源整合、…

如何开发一款安全高效的Android网络库(详细教程)

根据很多网友及项目需要,我们针对Retrofit做了一层简单封装,包含了很多可插拔的功能,能够适应大多数项目的需要,这一期我们来分析以下如何设计一款安全高效的Android网络库——FlexNet 1. 网络框架模块 在设计网络之前&#xff…

深度学习的舌象诊断:从舌头上了解系统性疾病!

首先 深度学习算法能否解决东方医学中依靠医生经验的诊断问题?而要实现这个目标,需要什么呢? 用舌头诊断被称为口腔健康的指标,但在东方医学中,舌头也被用来评估全身的状况。换句话说,通过分析舌头的图像…

【leetcode--单词规律】

题目要求: 跟上一个字符串的思路一致,只是要进行单词的拆分,用.split()函数即可。 class Solution:def wordPattern(self, pattern: str, s: str) -> bool:word s.split()if(len(pattern) ! len(word)):return Falsereturn len(set(patt…