RabbitMQ Exchange类型和工作模式介绍

这篇具有很好参考价值的文章主要介绍了RabbitMQ Exchange类型和工作模式介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一RabbitMQ Exchange类型

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

1.1.Fanout

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

如图:

RabbitMQ Exchange类型和工作模式介绍

1.2.Direct

direct类型的交换器路由规则很简单,它会把消息路由到那些BindingKey和RoutingKey完全匹配的 队列中,如下图:RabbitMQ Exchange类型和工作模式介绍

1.3.Topic

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

  • BindingKey和RoutingKey一样都是由.分隔的字符串;
  • BindingKey中可以存在两种特殊字符*#,用于模糊匹配,其中*用于匹配一个单词, #用于匹配多个单词(可以是0个)。
    RabbitMQ Exchange类型和工作模式介绍

1.4.Headers

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

二 RabbitMQ 工作模式介绍

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

生产者发消息,启动多个消费者实例来消费消息,每个消费者仅消费部分信息,可达到负载均衡的效果。RabbitMQ Exchange类型和工作模式介绍

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

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

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

RabbitMQ Exchange类型和工作模式介绍
1、每个消费者监听自己的队列
2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息。

2.3.routing路由模式

RabbitMQ Exchange类型和工作模式介绍

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

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

应用–direct交换器

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

使用direct交换器

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

RabbitMQ Exchange类型和工作模式介绍

上图中的交换器 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到多个单词
    RabbitMQ Exchange类型和工作模式介绍
    上图中,我们发送描述动物的消息。消息发送的时候指定的 routingKey包含了三个词,两个点。 第一个单词表示动物的速度,第二个是颜色,第三个是物种:..。

创建三个绑定:

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

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

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

如果不能匹配,就丢弃消息。
如果发送的消息 routingKey是" lazy.orange.male.rabbit",则会匹配最后一个绑定。
如果在 topic类型的交换器中 bindingKey使用 #,则就是 fanout类型交换器的行为。
如果在 topic类型的交换器中 bindingKey中不使用 *和 #,则就是 direct类型交换器的行为文章来源地址https://www.toymoban.com/news/detail-500351.html

到了这里,关于RabbitMQ Exchange类型和工作模式介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 202、RabbitMQ 之 使用 fanout 类型的Exchange 实现 Pub-Sub 消息模型---fanout类型就是广播类型

    就是声明一个 fanout 类型的 Exchange 来分发消息。消费者进行消费 fanout 类型就是广播模式 。 fanout 类型 的 Exchange 不会判断消息的路由key,直接将消息分发给绑定到该Exchange的所有队列。 生产者发送一条消息到fanout类型的Exchange后,绑定到该Exchange的所有队列都会收到该消息的

    2024年02月07日
    浏览(25)
  • RabbitMQ工作模式-工作队列

    官网关于工作模式的解释地址:https://www.rabbitmq.com/getstarted.html Work Queue(工作队列) 生产者发消息,启动多个消费者来消费消息,每个消费者仅消费部分消息,可达到负载均衡的效果。 创建生产者 创建消费者 首先运行消息费,为了测试工作队列模式,消费都需要启动多个,

    2024年02月10日
    浏览(24)
  • RabbitMQ工作模式-主题模式

    主题模式 官方文档参考:https://www.rabbitmq.com/tutorials/tutorial-five-python.html 使用topic类型的交换器,队列绑定到交换器、bingingKey时使用通配符,交换器将消息路由转发到具体队列时,会根据消息routingKey模糊匹配,比较灵活。 在Direct类型的交换器做到了根据日志级别的不同,将消

    2024年02月10日
    浏览(26)
  • RabbitMQ工作模式-路由模式

    官方文档参考:https://www.rabbitmq.com/tutorials/tutorial-four-python.html 使用 direct 类型的Exchange,发N条消息并使用不同的routingKey,消费者定义队列并将队列 routingKey 、Exchange绑定。此时使用 direct 模式Exchange必须要 routingKey 完成匹配的情况下消息才会转发到对应的队列中被消费。 样例使用

    2024年02月10日
    浏览(23)
  • RabbitMQ的工作模式

    RabbitMQ 的工作模式 一 .simple 模式(即最简单的收发模式) 二 .work 工作模式 ( 资源的竞争 ) publish_subscribe 发布订阅 (../../../../../0 马士兵 / 新建文件夹 /BAT 面试突击资料 (1)/ 整理 /BAT 面试突击资料 /15- 消息中间件 MQ 面试题( 2020 最新 版) .assets/publish_subscribe 发布订阅 ( 共享资

    2024年02月06日
    浏览(61)
  • RabbitMQ五大常用工作模式

    消息生产者 消息消费者(会一直监听队列) 工作队列 消息生产能力大于消费能力,增加多个消费节点 和简单队列类似,增加多个消费节点,处于竞争关系 默认策略:round robin轮训 生产者 消费者1 消费者2 轮训策略验证 先启动两个消费者,再启动生产者 缺点:存在部分节点

    2024年02月19日
    浏览(29)
  • RabbitMQ:工作队列模式

    📃个人主页:不断前进的皮卡丘 🌞博客描述:梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 🔥个人专栏:消息中间件 工作队列(又名: 任务队列 )背后的主要思想是避免立即执行资源密集型任务并等待其完成。相反

    2024年01月23日
    浏览(29)
  • 消息队列之RabbitMQ工作模式

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 消息队列之RabbitMQ工作模式 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 在这篇博客中,我将深入探讨 RabbitMQ 的工作模式,带你

    2024年01月18日
    浏览(34)
  • RabbitMQ消息队列的工作模式

    官方文档地址:https://www.rabbitmq.com/getstarted.html 工作模式其实就是消息队列分发消息的路由方式。 RabbitMQ常用的几种工作模式: 简单模式 WorkQueues工作队列模式 PubSub生产者/PubSub消费者模式 Routing路由模式 Topics通配符模式 发布/订阅模式(Publish/Subscribe):该模式用于一对多的

    2024年02月15日
    浏览(35)
  • RabbitMQ的6种工作模式

    官方文档: http://www.rabbitmq.com/ https://www.rabbitmq.com/getstarted.html RabbitMQ 常见的 6 种工作模式: 1)、消息产生后将消息放入队列。 2)、消息的消费者监听消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除。 3)、存在的问题:消息可能没有被消费者正确处

    2024年02月14日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包