天天看點

RabbitMQ的使用與分析

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。如果進不去,那隻

有兩種可能,一是服務沒啟起來,二是插件沒安裝生效。多試上面幾步就可以了。

RabbitMQ的使用與分析

                                               圖1--控制台安裝web插件

RabbitMQ的使用與分析

                                                 圖2-web插件控制台

3、RabbitMQ的獨特設計

RabbitMQ裡不僅僅有Queue,還有其他一些概念,像Vhost,exchange。MQ的生産者直接連的是exchange,exchange就像一個路由器,通過一定的規則和Queue進行綁定,消費者直接連接配接的是Queue。ecchange與Queue有多種綁定規則,具體如下:

Fanout Exchange:

RabbitMQ的使用與分析

                                                   圖3--扇出型路由

Topic Exchange:

RabbitMQ的使用與分析

                                                圖4--主題式路由

DirectExchange:

RabbitMQ的使用與分析

                                           圖5--直連型路由

HeadersExchange。

如果要像其他MQ一樣用,隻要選擇directExchange就可以了,由于複雜的場景,我在項目中運用的是topicExchange,可以根據不同的routekey路由到不同的隊列裡,進而

能達到負載均衡的作用。

RabbitMQ對權限也做了很好的設計,具體的權限粒度如圖所示:

RabbitMQ的使用與分析

                                                         圖6--權限控制粒度

4、RabbitMQ的使用

為了使用的簡單,先說明結合spring的使用方式,利用spring的IOC自動管理Bean。

需要引入以下的配置:

在java代碼中的引用示例如下:

當然,exchange和Queue以及他們的綁定也可以直接用代碼實作,具體例子如下:

我在項目中隻引入了兩個JAR檔案:Maven的中央倉庫裡就能下載下傳到(http://search.maven.org)

RabbitMQ的使用與分析

也可以直接用API而不需要spring。感興趣的可以到官網上檢視相關文檔。

最後推薦一本RabbitMQ的相關書《RabbitMQ in Action》,不過這本書是英文的,網上也有電子版的。