1. 程式人生 > >RabbitMQ學習教程(一)

RabbitMQ學習教程(一)

一:訊息中介軟體的定義:

      訊息中介軟體是在訊息的傳輸過程中儲存訊息的容器。訊息中介軟體在將訊息從它的源頭中繼到它的目標時充當中間人的作用。佇列的主要目的是提供路由並且保證訊息的傳遞;如果傳送訊息時接受者不可用,訊息佇列會保留有訊息,直到可以成功的傳遞它為止,當然,訊息佇列儲存訊息也是有期限的。

二:訊息中介軟體的作用:

     1.採用非同步處理模式

        訊息傳送者可以傳送一個訊息而無需等待響應。訊息傳送者將訊息傳送到一條虛擬的通道(主題或者是佇列)上,訊息接受者則訂閱或者監聽該通道。一條訊息可能最終轉發給一個或者多個的訊息接受者,這些接受者都無需對訊息傳送者作出迴應,整個過程是非同步的。

      例如:使用者資訊註冊,註冊完畢之後過段時間傳送郵件或者簡訊。(這樣理解:註冊和傳送郵件是兩個不同的事件,非同步的,使用者註冊資訊插入資料庫的同時向訊息中介軟體傳送一條訊息,減少使用者等待的過程,如果使用者做一個註冊要等很長的時間是很糟糕的事情生氣

    2.應用程式和應用程式之間是鬆耦合關係(理解為A宕機了對B沒有影響)

       傳送者和接受者不必瞭解對方,只需要確認訊息

       傳送者和接受者不必同時線上

   例如:線上交易系統為了保持資料的最終一致性,在支付系統處理完成後會把支付結果放到訊息中介軟體裡通知訂單系統修改訂單的支付狀態,兩個系統通過訊息中介軟體進行解耦。

三:訊息傳遞的服務模型:


mom中介軟體就是訊息中介軟體的一個簡稱

四:訊息中介軟體的傳遞模型:

     1.點對點模型(PTP)

        點對點模型用於訊息生產者和訊息消費者之間點到點的通訊。訊息生產者將訊息傳送到由某個名字標識的特定的消費者。這個名字實際上對應於訊息服務中的一個佇列(Queue),在訊息傳遞給消費者之前它被儲存在這個佇列中。佇列訊息可以放在記憶體中也可以是持久的,以保證在訊息服務出現故障的時候依然可以傳遞訊息。

       點對點的模型特性:

          (一):每一個訊息只用一個消費者

          (二):傳送者和接受者沒有時間的依賴(我放進去你愛什麼時候拿就什麼時候拿)

          (三):接受者確認訊息接受和處理成功(確認消費後刪除該條訊息)

         

     2.釋出訂閱模型(Pub/Sub)

        釋出者/接受者模型支援向一個特定的訊息主題生產訊息。0個或多個訂閱者可能對接受來自特定訊息主題的訊息感興趣。在這種模式下,釋出者和訂閱者彼此不知道對方。這種模式就好比是匿名公告板。這種模式概括為:多個消費者可以獲得訊息,在釋出者和訂閱者之間存在著時間的依賴性,釋出者需要建立一個訂閱(subscription),以便能夠消費者訂閱。訂閱者必須保持持續的活動狀態以接受訊息,除非訂閱者建立了持久的訂閱,在這種情況下,在訂閱者未連線時釋出的訊息將在訂閱者重新連線的時候重新發布。

     釋出/訂閱模型特性:

      1.每個訊息可以有多個訂閱者

      2.客戶端只有訂閱後才能接受到訊息

      3.持久訂閱

         訂閱關係建立後,訊息就不會消失,不管訂閱者是否都線上。

      4.非持久訂閱

          訂閱者為了接受訊息,必須一直線上。

             當只有一個訂閱者時候約等於點對點的模式

        

        ps:訊息中介軟體儲存訊息消費的軌跡:成功消費,失敗消費,未知狀態(網路斷開了等其他因素)

五:網際網路訊息中介軟體應用場景

     使用者註冊非同步處理案例:

            網站使用者註冊,註冊成功後會過一會發送郵件或者確認簡訊。(釋出訂閱模型)

        

六:rabbitMQ是一個在AMQP協議基礎上完整的,可服用的企業訊息系統。他遵循Mozilla Public License開源協議,採用Erlang實現的工業級的訊息佇列(MQ)伺服器。

       AMQP(高階訊息佇列協議)是一個非同步訊息傳遞所使用的應用層協議規範,作為線路層協議,而不是API(例如JMS),AMQP客戶端能夠無視訊息的來源任意傳送和接受資訊。AMQP的原始用途只是為金融界提供一個可以彼此協作的訊息協議,而現在的目標則是為了通用訊息佇列框架提供通用的構建工具,因此,面向訊息的中介軟體(MOM)系統,例如釋出/訂閱佇列,沒有作為基本的元素使用,反而通過傳送簡化的AMQ實體,使用者被賦予了構建例如這些實體的能力。這些實體也是規範的一部分,形成了線上路層協議頂端的一個層級:AMQP模型。這個模型統一了訊息模式,例如之前提到的釋出/訂閱,佇列,事務以及流資料,並且添加了額外的特性,例如更易於擴充套件,基於內容的路由。 

     RabbitMQ整體架構:


RabbitMQ架構--執行原理


    RabbitMQ重要術語


Exchange分類

         Directb Exchange(直接式交換器型別) - 直接互動式處理路由鍵。需要將一個佇列繫結到交換價上,要求該訊息與一個特定的路由鍵完全匹配。這是一個完整的匹配。如果一個佇列被繫結到該交換機上要求路由鍵“dog”,則只有標記為“dog”的訊息才被轉發,不會轉發dog.puppy,也不會轉發dog.guard,只會轉發dog.


       Fanout Exchange (廣播式交換器型別)- 廣播式路由鍵。你只需要簡單的將佇列繫結到交換機上。一個傳送到交換機的訊息都會被轉發到與該交換機繫結的所有佇列上。很像子網廣播,每臺子網內的主機都獲得了一份複製的訊息。Fanout交換機轉發訊息時最快的


         Topic Exchange(主題式交換器型別)--主題式交換器,通過訊息的路由關鍵字和繫結關鍵字的模式匹配,將訊息路由到被繫結的佇列中。這種路由器型別可以被用來支援經典的釋出/訂閱訊息傳輸模型----使用主題名字空間作為訊息定址模式,將訊息傳遞給那些部分或者全部匹配主題模式的多個消費者。主題交換器的型別的工作方式如下:繫結關鍵字用零個或者多個標記構成,每一個標記之間用“.”字元進行分隔。繫結關鍵字必須用這種形式明確說明,並支援萬用字元:"*"匹配一個片語,“#”零個或者多個片語。因此繫結關鍵字“*.stock.#”匹配路由關鍵字“usd.stock”和“eure.stock.db”


RabbitMQ常用配置介紹


RabbitMQ命令介紹

     

  RabbitMQ在Linux上安裝(略)