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外掛!!!

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

預設使用者名稱:guest

預設密碼:guest

四、核心概念

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的運作流程應該會有個基本的瞭解了:

五、三種ExchangeType

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

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

1、direct交換器

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

2、fanout交換器

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

3、topic交換器

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的典型應用場景,詳解其運作流程