一、RabbitMQ 入門祕籍,三分鐘帶你快速瞭解RabbitMQ

1、前言

剛開始接觸RabbitMQ的時候,有些概念那理解起來簡直是像風像雨又像霧,晦澀難懂。 這篇文章用盡量淺顯的語言來解釋RabbitMQ的入門知識。畢竟是入門課程,並無對不少概念進行深刻說明,若是你想更深刻的瞭解RabbitMQ,能夠繼續關注本頭條號後續發佈的文章或者本身從網上搜尋了資料,本身探索研究。html

2、RabbitMQ是什麼

官方定義:RabbitMQ是一種消息中間件,用於處理來自客戶端的異步消息。服務端將要發送的消息放入到隊列池中。接收端能夠根據RabbitMQ配置的轉發機制接收服務端發來的消息。RabbitMQ依據指定的轉發規則進行消息的轉發、緩衝和持久化操做,主要用在多服務器間或單服務器的子系統間進行通訊,是分佈式系統標準的配置。 趣味定義:兔子行動很是迅速並且繁殖起來也很是瘋狂,用Rabbit來命名這個分佈式軟件,呼應了RabbitMQ的主要任務是處理海量的信息web

3、安裝

一、安裝erlang

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

二、安裝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服務器

三、開啓web訪問

Windows下:打開CMD 進入rabbitmq的安裝目錄 執行rabbitmq-plugins enable rabbitmq_management命令 該命令,僅在首次運行RMQ時使用!!!目的就是加載Web插件!!! 異步

四、訪問測試:http://localhost:15672/

默認用戶名:guest 默認密碼:guest 分佈式

4、核心概念

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

5、三種ExchangeType

http://www.rabbitmq.com/tutorials/amqp-concepts.html 這裏介紹三種最主要的類型的exchange:direct、fanout和topic。3d

一、direct交換器

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

二、fanout交換器

Fanout 扇出,顧名思義,就是像風扇吹麪粉同樣,吹獲得處都是。若是使用fanout類型的exchange,那麼routing key就不重要了。由於凡是綁定到這個exchange的queue,都會受到消息。

三、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綁定以下圖

更多資料分享,問題諮詢,能夠入羣討論:375412858 請入羣索要代碼

相關文章
相關標籤/搜索