在RabbitMQ中有三種常用的轉(zhuǎn)發(fā)方式,分別是:
DirectExchange:路由鍵方式轉(zhuǎn)發(fā)消息。
FanoutExchange:廣播方式轉(zhuǎn)發(fā)消息。
TopicExchange:主題匹配方式轉(zhuǎn)發(fā)消息。
在RabbitMQ內(nèi)有個(gè)virtual-host即虛擬主機(jī)的概念,一個(gè)RabbitMQ服務(wù)可以配置多個(gè)虛擬主機(jī),每一個(gè)虛擬機(jī)主機(jī)之間是相互隔離,相互獨(dú)立的,授權(quán)用戶到指定的virtual-host就可以發(fā)送消息到指定隊(duì)列。
多節(jié)點(diǎn)時(shí)消息具體分發(fā)到哪個(gè)節(jié)點(diǎn)并不是固定的,完全是RabbitMQ分發(fā)機(jī)制來控制。
我們?cè)赒ueueEnum內(nèi)配置的路由鍵時(shí)有個(gè)特殊的符號(hào):#,在RabbitMQ消息隊(duì)列內(nèi)路由配置#時(shí)表示可以匹配零個(gè)或多個(gè)字符。我們TopicEnum枚舉內(nèi)定義的register.user,則是可以匹配QueueEnum枚舉定義register.#隊(duì)列的路由規(guī)則;
除此之外比較常用到的特殊字符還有一個(gè)*,在RabbitMQ消息隊(duì)列內(nèi)路由配置*時(shí)表示可以匹配一個(gè)字符,我們QueueEnum定義路由鍵如果修改成register.*時(shí),發(fā)送消息時(shí)路由為register.user則是可以接受到消息的。但如果發(fā)送時(shí)的路由為register.user.account時(shí),則是無法匹配該消息。

? ? ? ? 通過RabbitTemplate實(shí)例的convertAndSend方法將對(duì)象類型轉(zhuǎn)換成JSON字符串后發(fā)送到消息隊(duì)列服務(wù)端,RabbitMQ接受到消息后根據(jù)注冊(cè)的消費(fèi)者并且路由規(guī)則篩選后進(jìn)行消息轉(zhuǎn)發(fā),并實(shí)現(xiàn)消息的消費(fèi)。