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繫結如下圖: