RabbitMQ通過Exchange(交換機)將消息根據不同規則路由到對應的Queue(隊列)中,本文主要簡述交換機的四種類型,僅供學習分享使用,如有不足之處,還請指正。
RabbitMQ交換機類型
RabbitMQ一共四種交換機,如下所示:
- Direct Exchange:直連交換機,根據Routing Key(路由鍵)進行投遞到不同隊列。
- Fanout Exchange:扇形交換機,采用廣播模式,根據綁定的交換機,路由到與之對應的所有隊列。
- Topic Exchange:主題交換機,對路由鍵進行模式匹配后進行投遞,符號#表示一個或多個詞,*表示一個詞。
- 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常見的四種交換機模式。
備注
【山園小梅 其一】
作者:林逋 朝代:宋朝
眾芳搖落獨喧妍, 占盡風情向小園。
疏影橫斜水清淺, 暗香浮動月黃昏。
霜禽欲下先偷眼, 粉蝶如知合斷魂。
幸有微吟可相狎, 不須檀板共金樽。
【山園小梅 其二】
作者:林逋 朝代:宋朝
剪綃零碎點酥乾,向背稀稠畫亦難。
日薄從甘春至晚,霜深應怯夜來寒。
澄鮮祇共鄰僧惜,冷落猶嫌俗客看。
憶着江南舊行路,酒旗斜拂墮吟鞍。