RabbitMQ交换机类型简述

RabbitMQ通过Exchange(交换机)将消息根据不同规则路由到对应的Queue(队列)中,本文主要简述交换机的四种类型,仅供学习分享使用,如有不足之处,还请指正。

RabbitMQ交换机类型

RabbitMQ一共四种交换机,如下所示:

  1. Direct Exchange:直连交换机,根据Routing Key(路由键)进行投递到不同队列。
  2. Fanout Exchange:扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。
  3. Topic Exchange:主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。
  4. Header Exchange:头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。

Direct Exchange

直连交换机,根据Routing Key(路由键)进行投递到不同队列。

单个绑定,一个路由键对应一个队列。如下所示:

 

多个绑定,一个路由键对应多个队列,则消息会分别投递到两个队列中,如下所示:

Fanout Exchange

扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。

Topic Exchange

主题交换机,对路由键进行模式匹配后进行投递,符号#表示一个或多个词,*表示一个词。因此“abc.#”能够匹配到“abc.def.ghi”,但是“abc.*” 只会匹配到“abc.def”。如下所示:

Header Exchange

头交换机,不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对;当消息发送到RabbitMQ时会取到该消息的headers与Exchange绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers属性是一个键值对,可以是Hashtable,键值对的值可以是任何类型。而fanout,direct,topic 的路由键都需要要字符串形式的。

匹配规则x-match有下列两种类型:

x-match = all :表示所有的键值对都匹配才能接受到消息

x-match = any :表示只要有键值对匹配就能接受到消息

消息头交换机,如下图所示:

以上就是RabbitMQ常见的四种交换机模式。

 备注

【山园小梅 其一】
作者:林逋 朝代:宋朝
众芳摇落独喧妍, 占尽风情向小园。 
疏影横斜水清浅, 暗香浮动月黄昏。
霜禽欲下先偷眼, 粉蝶如知合断魂。
幸有微吟可相狎, 不须檀板共金樽。
【山园小梅 其二】
作者:林逋 朝代:宋朝
剪绡零碎点酥乾,向背稀稠画亦难。
日薄从甘春至晚,霜深应怯夜来寒。
澄鲜祇共邻僧惜,冷落犹嫌俗客看。
忆着江南旧行路,酒旗斜拂堕吟鞍。

posted @ 2021-05-09 18:55  老码识途呀  阅读(6848)  评论(0编辑  收藏  举报