點擊上方“Java後端技術之路”,選擇“置頂或者星標”
與你一起成長
本文主要是實踐建議大家下載下來代碼走一遍,代碼地址在文末。
問題:
首先帶着下面幾個問題來展開討論:
1、有哪幾種交換器(channel)。
2、direct交換器一個隊列綁定多個交換器會什麼樣子。
3、direct交換器一個連接多個信道會什麼樣子。
4、direct交換器多個消費者消費一個隊列會如何。
5、direct交換器多個隊列綁定一個信道會如何。
6、topic交換器如何訂閱,*與#什麼區別。
7、Fanout交換器什麼機制。
下面我們根據代碼實踐來討論上面幾個問題。
客戶端與RabbitMQ通訊
1、引入jar
2、建立連接
創建連接工廠 》 設置地址 》 設置端口號 》 需要登錄的設置密碼 》 新建連接
3、創建信道channel
生產者消費上面1、2步驟代碼都一樣,只有3步驟會有部分差異,具體如下:
生產者:創建信道 》 綁定交換路由 》 綁定隊列(非必鬚生產者消費者兩遍誰做都可以) 》 發佈消息
消費者:創建信道 》 在信道中綁定交換器 》 設置隊列 》 綁定路由 》 聲明一個消費者 》 正式指定隊列消費
針對疑問做解答
疑問1:有哪幾種交換機
共有四種 direct,fanout,topic,headers,其中 headers(幾乎和 direct 一樣)不實用,可以忽略。
具體可以參見上篇文章:MQ第一節
疑問2:direct交換器一個隊列綁定多個交換器會什麼樣子。
一個隊列綁定多個交換器,會收到每個交換器的消息。
代碼演示如下:
生產者:
消費者:
運行結果:
從實例中明顯發現收到了每個路由的消息。
疑問3:direct交換器一個連接多個信道會什麼樣子
一個連接多個信道每個連接都會收到消息。
疑問4:direct交換器多個消費者消費一個隊列會如何。
多個消費者消費一個隊列會輪詢消費。也就是多個消費者消費的數據加起來等於一個隊列裏面的數據
疑問5:direct交換器多個隊列綁定一個信道會如何。
每個隊列都會收到信道的所有消息
疑問6:topic交換器如何訂閱,*與#什麼區別。
*匹配一個,#匹配多個
疑問7:Fanout交換器什麼機制。
廣播機制,隊列綁定一個信道會收到所有消息,和綁定全部信道是一樣的。
代碼地址
建議大家down下來代碼跑一邊理解一下。
https://github.com/SunSmileAZY/mq-study
往期推薦:
面試精選