RabbitMQ Exchange类型和工作模式介绍

news2024/12/24 9:46:10

RabbitMQ Exchange类型和工作模式介绍

  • 一RabbitMQ Exchange类型
    • 1.1.Fanout
    • 1.2.Direct
    • 1.3.Topic
    • 1.4.Headers
  • 二 RabbitMQ 工作模式介绍
    • 2.1.work工作模式(资源的竞争)
    • 2.2.publish/subscribe发布订阅(共享资源)
    • 2.3.routing路由模式
      • 应用--direct交换器
    • 2.4.topic 主题模式(路由模式的一种)

一RabbitMQ Exchange类型

RabbitMQ常用的交换器类型有: fanout、 direct、 topic、 headers四种。

1.1.Fanout

会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中

如图:

在这里插入图片描述

1.2.Direct

direct类型的交换器路由规则很简单,它会把消息路由到那些BindingKey和RoutingKey完全匹配的 队列中,如下图:在这里插入图片描述

1.3.Topic

topic类型的交换器在direct匹配规则上进行了扩展,也是将消息路由到BindingKey和RoutingKey 相匹配的队列中,这里的匹配规则稍微不同,它约定:

  • BindingKey和RoutingKey一样都是由.分隔的字符串;
  • BindingKey中可以存在两种特殊字符*#,用于模糊匹配,其中*用于匹配一个单词, #用于匹配多个单词(可以是0个)。
    在这里插入图片描述

1.4.Headers

headers类型的交换器不依赖于路由键的匹配规则来路由信息,而是根据发送的消息内容中的 headers属性进行匹配。在绑定队列和交换器时指定一组键值对,当发送的消息到交换器时, RabbitMQ会获取到该消息的headers,对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果匹配,消息就会路由到该队列。headers类型的交换器性能很差,不实用。

二 RabbitMQ 工作模式介绍

2.1.work工作模式(资源的竞争)

生产者发消息,启动多个消费者实例来消费消息,每个消费者仅消费部分信息,可达到负载均衡的效果。在这里插入图片描述

1.消息产生者将消息放入队列消费者可以有多个,消费者1,消费者2同时监听同一 个队列,消息被消费。C1 C2共同争抢当前的消息队列内容,谁先拿到谁负责消费消息(隐患:高并发情况下,默认会产生某一个消息被多个消费者共同使用,可以设置一个开关(syncronize) 保证一条消息只能被一个消费者使用)。

2.2.publish/subscribe发布订阅(共享资源)

使用fanout类型交换器,routingKey忽略。每个消费者定义生成一个队列并绑定到同一个 Exchange,每个消费者都可以消费到完整的消息。

在这里插入图片描述
1、每个消费者监听自己的队列
2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息。

2.3.routing路由模式

在这里插入图片描述

使用 direct类型的Exchange,发N条消费并使用不同的 routingKey,消费者定义队列并将队列、 routingKey、Exchange绑定。此时使用 direct模式Exchagne必须要 routingKey完全匹配的 情况下消息才会转发到对应的队列中被消费

上一个模式中,可以将消息广播到很多接收者。 现在我们想让接收者只接收部分消息,如,我们通过直接模式的交换器将关键的错误信息记录到 log文件,同时在控制台正常打印所有的日志信息。

应用–direct交换器

分布式系统中有很多应用,这些应用需要运维平台的监控,其中一个重要的信息就是服务器的日志 记录。
我们需要将不同日志级别的日志记录交给不同的应用处理。 如何解决?

使用direct交换器

如果要对不同的消息做不同的处理,此时不能使用 fanout类型的交换器,因为它只会盲目的广播消息。 我们需要使用 direct类型的交换器。 direct交换器的路由算法很简单只要消息的 routingKey和队列的 bindingKey对应,消息就可以推送给该队列。

在这里插入图片描述

上图中的交换器 X是 direct类型的交换器,绑定的两个队列中,一个队列的 bindingKey是 orange,另一个队列的 bindingKey是 black和 green。 如此,则 routingKey是 orange的消息发送给队列Q1, routingKey是 black和 green的消息发 送给Q2队列,其他消息丢弃。

2.4.topic 主题模式(路由模式的一种)

使用 topic类型的交换器,队列绑定到交换器、 bindingKey时使用通配符,交换器将消息路由转 发到具体队列时会根据消息 routingKey模糊匹配,比较灵活。

上个模式中,我们通过 direct类型的交换器做到了根据日志级别的不同,将消息发送给了不同队列的。 这里有一个限制,现在我不仅想根据日志级别划分日志消息,还想根据日志来源划分日志,怎 么做?

比如,我想监听cron服务发送的 error消息,又想监听从kern服务发送的所有消息。 此时可以使用RabbitMQ的主题模式( Topic)。

要想 topic类型的交换器, routingKey就不能随便写了,它必须得是点分单词。单词可以随便写,生产中一般使用消息的特征。如:“stock.usd.nyse”,“nyse.vmw”,“quick.orange.rabbit”等。该点分单词字符串最长255字节。 bindingKey也必须是这种形式。 topic类型的交换器背后原理跟 direct类型的类似:只要队列 的 bindingKey的值与消息的 routingKey匹配,队列就可以收到该消息。有两个不同:

  1. *(star)匹配一个单词
  2. #匹配0到多个单词
    在这里插入图片描述
    上图中,我们发送描述动物的消息。消息发送的时候指定的 routingKey包含了三个词,两个点。 第一个单词表示动物的速度,第二个是颜色,第三个是物种:..。

创建三个绑定:

Q1绑定到*.orange.*
Q2绑定到 *.*.rabbitlazy.#

  1. Q1关注orange颜色动物的消息

  2. Q2关注兔子的消息,以及所有懒的动物消息

如果不能匹配,就丢弃消息。
如果发送的消息 routingKey是" lazy.orange.male.rabbit",则会匹配最后一个绑定。
如果在 topic类型的交换器中 bindingKey使用 #,则就是 fanout类型交换器的行为。
如果在 topic类型的交换器中 bindingKey中不使用 *和 #,则就是 direct类型交换器的行为

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

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

相关文章

一键轻松造数据:通过Postman实现表单提交

一、原始需求的诞生 在测试的过程中,需要大量的表单。于是我选择了通过postman发送表单提交的接口来造数据。 如上图所示,表单提交接口所需的参数以及请求体中需模拟的IP地址。参数为 {{}} 的表示需要不同的实参,至于原因就不在这里赘述了。如…

618手机大战:各大品牌花式秀战报,但难掩冷淡行情

在手机出货量持续下行的态势下,各大手机厂商普遍对618这个年中大促寄予厚望,希望通过各种促销手段,扭转销售颓势。 比如,今年5月下旬,小米、荣耀、OPPO、vivo等厂商就已经开启了降价、分期免息等优惠活动,…

Vue3自定义指令实现按钮权限

一、需求前提 登录成功后,后端直接返回了用户的所有权限(路由权限按钮权限),在已经实现菜单权限的基础上,实现每个页面的按钮权限,树形数据结构如下: { "roles": ["admin&q…

嵌入式实时操作系统的设计与开发New(六)

aCoral的优先级与数字大小成反比,即:数字越大,优先级越低。 #define MAX_PRIO_NUM ((CFG_MAX_THREAD1) & 0xff) #define MINI_PRIO CFG_MAX_THREAD //最低优先级40typedef enum{ACORAL_INIT_PRIO; //init线程独有的0优先级ACORAL_MAX_PR…

如何刷新 DNS 缓存 (macOS, Linux, Windows)

如何刷新 DNS 缓存 (macOS, Linux, Windows) Unix Linux Windows 如何刷新 DNS 缓存 (macOS, FreeBSD, RHEL, CentOS, Debian, Ubuntu, Windows) 请访问原文链接:https://sysin.org/blog/how-to-flush-dns-cache/,查看最新版。原创作品,转载…

论文解读|基于平面双关节机器人的相机姿态分析与评估

原创 | 文 BFT机器人 01 研究内容 论文的主要研究内容是基于平面双关节机器人的相机姿态分析和评估。研究旨在分析相机的位置调整和一般数据分析,讨论人体姿势的平衡、关节运动的控制以及相机速率的估计和控制。 通过有限相机技术的应用,有效解决平面摄影…

【虚拟机数据恢复】XenServer虚拟机磁盘数据被破坏的数据恢复案例

虚拟机数据恢复环境: 一台某品牌720服务器,4块STAT硬盘通过RAID卡组建raid10磁盘阵列。部署的XenServer虚拟化平台Windows Server操作系统,共两个虚拟磁盘:数据盘系统盘。服务器作为Web服务器使用,上层部署ASP SQL Se…

Chrome插件开发_V3_浏览器扩展插件基础教程

文章目录 一、简介二、核心介绍三、自定义页面背景色三、设置页面背景图(web_accessible_resources)四、设置徽章(Badge)五、桌面通知六、消息通信七、自定义右键菜单(添加、更新、删除)八、Omnibox九、浏览…

JVM基础知识

JVM 一次编译终身运行1.1 JVM和java的体系结构1.1.1 虚拟机与JAVA虚拟机1.1.2 JVM的位置1.1.3 JVM的整体执行流程1.1.4 JAVA代码的执行流程1.1.5 JVM架构模型1.1.6 JVM的生命周期1.1.7 Sun Classic Vm1.1.8 Exact VM1.1.9 Hotspot VM1.1.10 BEA的JRockit1.1.11 IBM的 J91.1.12 …

云渲染是什么?如何挑选云渲染平台

在影视动画、建筑设计、游戏开发等领域,渲染是一个非常重要的环节,它可以将场景、模型、纹理、材质等元素综合起来,生成逼真的图像或视频。然而,渲染也是一个非常耗时和耗能的过程,它需要大量的计算资源和硬件设备&…

Intel base instruction -- Jcc

检查EFLAGS寄存器中一个或多个状态标志(CF、of、PF、SF和ZF)的状态,如果这些标志处于指定状态(条件),则执行跳转到目标操作数指定的目标指令。条件代码(cc)与每个指令相关联&#xf…

实用干货-汇总篇

_ 实用干货 _ 11.实用干货-基因&基因组知识回顾 (qq.com)22.实用干货—解惑NGS可能引入的错误突变 (qq.com)33.临床肿瘤NGS的常规检测流程 (qq.com)44.实用干货—DNA甲基化相关知识点整理 (qq.com)55.实用干货-NGS的QC质控和突变结果复核 (qq.com)65.实用干货-你可能没…

patch 报错 can‘t find file to patch at input line 4

错误现象&#xff1a; 解决 -p3 patch -p3 < ../speccpu2006-kylinv10-aarch64.patch

问题总结,web自动化测试元素无法操作?shadowDOM节点元素解决......

前言 web自动化遇到shadowDOM你会操作吗&#xff1f; 之前在做web自动化的时候&#xff0c;发现页面上有些元素&#xff0c;在selenium中无法通过xpath来定位&#xff0c;各种原因找了半天都没找到解决方案&#xff0c;最后发现元素在一个叫做shadow-root的节点下面&#xff…

消息通知系统设计

编辑导语&#xff1a;消息通知可以将内容实时送达用户手机页面&#xff0c;但是泛滥的消息通知会引起用户的反感&#xff0c;也违背了这个设计的初衷。如何理解以及设计消息通知&#xff0c;作者作了简单的分享&#xff0c;我们一起来看看吧。 消息通知可以及时地将状态、内容…

开发之路,穷且益坚,不坠青云之志(入门开发者共勉)

引言 2023毕业季&#xff0c;距离笔者毕业已过2年有余。 互联网从业环境由盛转衰&#xff0c;互联网从业者数量剧增&#xff0c;市场竞争异常激烈&#xff0c;原本的利润空间被不断挤压&#xff0c;以至于很多开发者对互联网已经失去了信心与激情。 互联网的市场份额依旧是占…

全志科技T507-H工业核心板规格书(4核ARM Cortex-A53,主频1.416GHz)

1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板&#xff0c;主频高达1.416GHz。核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案&#xff0c;国产化率100%。 核心板通过邮票孔连接方式引出MIPI C…

6 应用层-6.1【实验】【计算机网络】

6 应用层-6.1【实验】【计算机网络】 前言推荐6 应用层6.1 Web服务与FTP服务配置0 搭建拓扑图1 Web演示2 FTP演示6.1.1实验章节测验 最后 前言 2023-6-25 14:35:53 以下内容源自《创作模板三》 仅供学习交流使用 推荐 4端到端协议-4.3【实验】【计算机网络】 6 应用层 6.…

【Java|多线程与高并发】阻塞队列以及生产者-消费者模型

文章目录 1. 前言2. 阻塞队列3. 实现阻塞队列4. 生产者-消费者模型5. 总结 1. 前言 阻塞队列(BlockingQueue)常用于多线程编程中&#xff0c;可以实现线程之间的同步和协作。它可以用来解决生产者-消费者问题&#xff0c;其中生产者线程将元素插入队列&#xff0c;消费者线程从…

《网络安全0-100》自学误区和陷阱

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员(以编程为基础的学习)再开始学习 我在之前的回答中&#xff0c;我都一再强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而且实际向安全过渡后可用到…