1、簡介
對于系統間的解耦合,無非是采用MQ(消息系統)的方式,而在衆多的MQ方案中,使用的比較廣泛且性能較高的開源項目則是RabbitMQ了。
RabbitMQ是采用Erlang語言編寫,天生的支援高并發,而且内部有不同其它MQ的獨特設計。
2、安裝
為了學習與使用rabbitMQ,我們首先需要在我們的機器上安裝它的服務。這裡我們以windows下32系統為例,需要otp_win32_R16B02.exe和rabbitmq-server-3.2.1.exe兩個安裝檔案,很容易就能下載下傳到,官網上也有。這兩個的安裝是按正常下一步直到結束。安裝完成後到rabbitMQ的根目錄下的sbin目錄下,執行
rabbitmq-plugins enable rabbitmq_management安裝web插件,然後到計算機管理裡找到rabbitmq的service,選擇并啟動,再執行下安裝的sbin目錄裡的rabbitmqctl.bat檔案,等服務都啟動好後就可以進入web控制台了,在浏覽器中輸入http://127.0.0.1/55672,使用者名和密碼預設都是guest。如果進不去,那隻
有兩種可能,一是服務沒啟起來,二是插件沒安裝生效。多試上面幾步就可以了。

圖1--控制台安裝web插件
圖2-web插件控制台
3、RabbitMQ的獨特設計
RabbitMQ裡不僅僅有Queue,還有其他一些概念,像Vhost,exchange。MQ的生産者直接連的是exchange,exchange就像一個路由器,通過一定的規則和Queue進行綁定,消費者直接連接配接的是Queue。ecchange與Queue有多種綁定規則,具體如下:
Fanout Exchange:
圖3--扇出型路由
Topic Exchange:
圖4--主題式路由
DirectExchange:
圖5--直連型路由
HeadersExchange。
如果要像其他MQ一樣用,隻要選擇directExchange就可以了,由于複雜的場景,我在項目中運用的是topicExchange,可以根據不同的routekey路由到不同的隊列裡,進而
能達到負載均衡的作用。
RabbitMQ對權限也做了很好的設計,具體的權限粒度如圖所示:
圖6--權限控制粒度
4、RabbitMQ的使用
為了使用的簡單,先說明結合spring的使用方式,利用spring的IOC自動管理Bean。
需要引入以下的配置:
在java代碼中的引用示例如下:
當然,exchange和Queue以及他們的綁定也可以直接用代碼實作,具體例子如下:
我在項目中隻引入了兩個JAR檔案:Maven的中央倉庫裡就能下載下傳到(http://search.maven.org)
也可以直接用API而不需要spring。感興趣的可以到官網上檢視相關文檔。
最後推薦一本RabbitMQ的相關書《RabbitMQ in Action》,不過這本書是英文的,網上也有電子版的。