直接模式(Direct)
我們先看一下這張直接模式的流程圖
我們可以看到一個(gè)消息的生產(chǎn)者發(fā)送了一條沒有帶交換器名稱的信息茵休,只帶了一個(gè)條件【KEY】膳汪,那么這時(shí)RabbitMQ就會(huì)認(rèn)為是采用直接模式發(fā)送信息
直接模式就是雖然消息依然經(jīng)過了交換器遣总,但這個(gè)交換器是不起作用的雀久,這個(gè)消息會(huì)直接跟據(jù)條件【KEY】找到名為【KEY】的消息隊(duì)列然后放入該隊(duì)列
然而直接模式有一個(gè)問題就是只能點(diǎn)對(duì)點(diǎn),只能選擇向一個(gè)隊(duì)列發(fā)送消息
一句話總結(jié):在只需要將消息發(fā)給唯一一個(gè)節(jié)點(diǎn)時(shí)就使用這種模式
如果你想發(fā)送一條信息能被多個(gè)隊(duì)列收取到該怎么做呢斗埂?那就要用到下面兩種模式了
分列模式(Fanout)
先看一看分列模式的流程圖
這次消息帶了交換器的名稱塞琼,就表明我這條消息要交給這個(gè)交換器處理了,要想使用分列模式得需要先把這個(gè)交換器設(shè)置為分類模式愧膀,創(chuàng)建的方法如下圖所示拦键,將Type屬性設(shè)置為Fanout即可
下面這張圖就是將三個(gè)隊(duì)列綁定到這個(gè)交換器上,那么這個(gè)消息就可以只需發(fā)送一次就可以被所有的被綁定的隊(duì)列收取了
一句話總結(jié):在需要將消息一次發(fā)給多個(gè)隊(duì)列時(shí)就使用這種模式
但好像這樣有點(diǎn)死板檩淋,我想更加靈活的掌控一次消息被哪些隊(duì)列收取矿咕,而不是只能靠建很多交換器綁定隊(duì)列這種麻煩的辦法實(shí)現(xiàn)業(yè)務(wù)
接下來就該可以說是加強(qiáng)版的分列模式登場(chǎng)了
主題模式(Topic)
先看一看流程圖
可以看到隊(duì)列也加了一個(gè)條件,仔細(xì)看一看被紅線連接的兩個(gè)消息的條件寫的什么,把這三個(gè)對(duì)比一下
相信聰明的你已經(jīng)猜出隊(duì)列的這個(gè)條件#號(hào)代表的意思就是模糊匹配碳柱,只要是routing key以u(píng)sa.開頭的消息捡絮,不管后面再寫什么,都會(huì)被binding key=usa.#的隊(duì)列收取到
一句話總結(jié):任何發(fā)送到Topic Exchange的消息都會(huì)被轉(zhuǎn)發(fā)到所有關(guān)心RouteKey中指定話題的Queue上莲镣,這就保證了可以更加靈活的運(yùn)用RabbitMQ啦~
文章來源于網(wǎng)絡(luò)福稳。
感謝大家閱讀,歡迎大家私信討論瑞侮。給大家推薦一個(gè)Java技術(shù)交流群:473984645里面會(huì)分享一些資深架構(gòu)師錄制的視頻資料:有Spring的圆,MyBatis,Netty源碼分析半火,高并發(fā)越妈、高性能、分布式钮糖、微服務(wù)架構(gòu)的原理梅掠,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識(shí)體系店归。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源阎抒,目前受益良多!
推薦大家閱讀:
Java高級(jí)架構(gòu)學(xué)習(xí)資料分享+架構(gòu)師成長(zhǎng)之路?
個(gè)人整理了更多資料以PDF文件的形式分享給大家消痛,需要查閱的程序員朋友可以來免費(fèi)領(lǐng)取且叁。還有我的學(xué)習(xí)筆記PDF文件也免費(fèi)分享給有需要朋友!