三分鐘帶你快速了解RabbitMQ,掌握RabbitMQ入門祕籍

一、前言

剛開始接觸RabbitMQ的時候,有些概念那理解起來簡直是像風像雨又像霧,晦澀難懂。

這篇文章用盡可能淺顯的語言來解釋RabbitMQ的入門知識。畢竟是入門課程,並沒有對很多概念進行深入說明,如果你想更深入的瞭解RabbitMQ,可以繼續關注本頭條號後續發佈的文章或者自己從網上搜尋了資料,自己探索研究。

二、RabbitMQ是什麼

官方定義:RabbitMQ是一種消息中間件,用於處理來自客戶端的異步消息。服務端將要發送的消息放入到隊列池中。接收端可以根據RabbitMQ配置的轉發機制接收服務端發來的消息。RabbitMQ依據指定的轉發規則進行消息的轉發、緩衝和持久化操作,主要用在多服務器間或單服務器的子系統間進行通信,是分佈式系統標準的配置。

趣味定義:兔子行動非常迅速而且繁殖起來也非常瘋狂,用Rabbit來命名這個分佈式軟件,呼應了RabbitMQ的主要任務是處理海量的信息

三、安裝

1、安裝erlang

下載地址:http://erlang.org/download/otp_win64_21.0.1.exe

2、安裝rabbitmq

下載地址:https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3.7.7.exe

如果你要安裝

其它版本,注意版本對應:https://www.rabbitmq.com/which-erlang.html

3、開啟web訪問

Windows下:打開CMD

進入rabbitmq的安裝目錄

執行rabbitmq-plugins enable rabbitmq_management命令

該命令,僅在首次運行RMQ時使用!!!目的就是加載Web插件!!!

三分鐘帶你快速瞭解RabbitMQ,掌握RabbitMQ入門秘籍

4、瀏覽器訪問:http://localhost:15672/

默認用戶名:guest

默認密碼:guest

三分鐘帶你快速瞭解RabbitMQ,掌握RabbitMQ入門秘籍

四、核心概念

三分鐘帶你快速瞭解RabbitMQ,掌握RabbitMQ入門秘籍

https://content.pivotal.io/rabbitmq/understanding-when-to-use-rabbitmq-or-apache-kafka

RabbitMQ broker,原話是RabbitMQ isn’t a food truck, it’s a delivery service,其實說白了,就是一種傳輸服務。

Exchange: 接受生產者發送的消息,並根據Binding規則將消息路由給服務器中的隊列。ExchangeType決定了Exchange路由消息的行為。在RabbitMQ中,ExchangeType常用的有direct、Fanout和Topic三種,在第三部分會詳細介紹。

Message Queue: 消息隊列。我們發送給RabbitMQ的消息最後都會到達各種queue,並且存儲在其中(如果路由找不到相應的queue則數據會丟失),等待消費者來取。

Binding Key:它表示的是Exchange與Message Queue是通過binding key進行聯繫的,這個關係是固定的,初始化的時候,我們就會建立該隊列。

Routing Key:生產者在將消息發送給Exchange的時候,一般會指定一個routing key,來指定這個消息的路由規則。這個routing key需要與Exchange Type及binding key聯合使用才能生,我們的生產者只需要通過指定routing key來決定消息流向哪裡。

我的註釋:初始化的時候,exchange與各個隊列的綁定關係是通過binding key進行綁定的;發送消息的時候,使用的routing key就是binding key的某一個(實質,兩者是一個含義,角度不同,名稱含義不同)

對於消費端來說,只用知道MQ的virtual host 和queue的名稱就可以了。而對於發送端,則需要知道exchange和routing key的名稱,相對而言queue的名稱就不那麼重要了(不過也要依Exchange Type而定)。

以下是RabbitMQ最簡單的流程圖,相信看到這裡的你,對MQ的運作流程應該會有個基本的瞭解了:

三分鐘帶你快速瞭解RabbitMQ,掌握RabbitMQ入門秘籍

五、三種ExchangeType

http://www.rabbitmq.com/tutorials/amqp-concepts.html

這裡介紹三種最主要的類型的exchange:direct、fanout和topic。

1、direct交換器

三分鐘帶你快速瞭解RabbitMQ,掌握RabbitMQ入門秘籍

Direct交換器很簡單,如果是Direct類型,就會將消息中的RoutingKey與該Exchange關聯的所有Binding中的BindingKey進行比較,如果相等,則發送到該Binding對應的Queue中。有一個需要注意的地方:如果找不到指定的exchange,就會報錯。但routing key找不到的話,不會報錯,這條消息會直接丟失,所以此處要小心

2、fanout交換器

三分鐘帶你快速瞭解RabbitMQ,掌握RabbitMQ入門秘籍

Fanout 扇出,顧名思義,就是像風扇吹麵粉一樣,吹得到處都是。如果使用fanout類型的exchange,那麼routing key就不重要了。因為凡是綁定到這個exchange的queue,都會受到消息。

3、topic交換器

三分鐘帶你快速瞭解RabbitMQ,掌握RabbitMQ入門秘籍

direct是將消息放到exchange綁定的一個queue裡(一對一);

fanout是將消息放到exchange綁定的所有queue裡(一對所有)

那可不可以把消息放到exchange綁定的一部分queue裡,或者多個routing key可以路由到一個queue裡呢?

topic類型的exchange就可以實現(一對部分)。

topic應用場景:打印不同級別的錯誤日誌

例如,我們的系統出錯後會根據不同的錯誤級別生成error_levelX.log日誌,我們在後臺首先要把所有的error保存在一個總的queue(綁定了一個*.error的路由鍵)裡,然後再按level分別存放在不同的queue。

routing key綁定如下圖:

三分鐘帶你快速瞭解RabbitMQ,掌握RabbitMQ入門秘籍

進階攻略:


分享到:


相關文章: