RabbitMQ實現消息總棧

      RabbitMQ是實現高級消息隊列協議(AMQP)的開源消息代理軟件,也成爲面向消息的中間件。RabbitMQ服務器是高性能、可伸縮而聞名的Erlang語言編寫而成的,其集羣和故障轉移是構建在開放平臺框架上的。編程

       AMQP是 Advanced Message Queuing Protocol的簡稱,它是面向消息中間件的開放式標準應用層協議。定義瞭如下特徵:vim

   1.消息方向安全

   2.消息隊列服務器

   3.消息路由(包括點到點和發佈-訂閱模式)網絡

   4.可靠性架構

   5.安全性併發

       AMQP要求消息的提供者和客戶端接收者的行爲要求實現對不一樣供應商能夠用相同的方式進行互相操做。在以往的中間件標準中,主要仍是創建在API級別,好比JMS(activimq),集中於經過不一樣的中間件實現來創建標準,而不是在多箇中間件間實現互操做性。框架

      AMQP與JMS不一樣,JMS定義了一個API和一組消息接收必須實現的行爲,而AMQP是一個線路級協議。線路級協議描述的是經過網絡發送的數據傳輸格式,於是,任何符合該數據格式的消息發送和接收工具都能互相兼容和進行操做,這樣就能輕易實現跨技術平臺的架構方案。編程語言

       RabbitMQ以AMQP協議實現,因此它能夠支持多種操做系統,多種編程語言,幾乎能夠覆蓋全部主流的企業級技術平臺。工具

       RabbitMQ的基本概念:

1.Broker: 能夠理解爲消息隊列服務器的實體,它是一箇中間件應用,負責接收消息生產者的消息,而後將消息發送到消息消費者或者其餘Broker.

2.Exchange:消息交換機,是消息第一個到達的地方,消息經過它指定的路由規則,分佈到不一樣的消息隊列中去。

3.Queue: 消息隊列,消息經過發送和路由以後最終到達的地方,到達Queue的消息即進入邏輯上等待消費的狀態,每一個消息都會被髮送到一個或者多個隊列。

4.Binding:綁定,他的做用就是把Exchange和Queue按照路由規則綁定起來,也就是Exchange和Queue之間的虛擬鏈接。

5.Routing Key:路由關鍵字,Exchange根據這個關鍵字進行消息投遞。

6.Virtual host: 虛擬主機,它是對Broker的虛擬劃分,將消費者、生產者和它們依賴的AMQP相關結構進行隔離,通常都是爲了安全考慮。好比咱們能夠在一個Broker中設置多個虛擬主機,對不一樣用戶進行權限的分離。

7.Connection:鏈接,表明生產者、消費者、Broker之間進行通訊的物理鏈接。

8.Channel:消息通道,用於鏈接生產者和消費者的邏輯結構。在客戶端的每一個鏈接裏可創建多個Channel,每一個Channel表明一個會話任務,經過Channle能夠隔離同一個鏈接中的不一樣交互內容。

9.Producer:消息生產者製造消息併發送消息的程序。

10.Consumer:消息消費者,接收消息並處理消息的程序。

 

消息投遞到隊列的整個過程大體以下:

一、客戶端鏈接到消息隊列服務器,打開一個channel.

二、客戶端聲明一個Exchange,並設置相關屬性。

三、客戶端聲明一個Queue,並設置相關屬性。

四、客戶端使用Routing Key,在Exchange 和Queue之間創建好綁定關係。

五、客戶端投遞消息到Exchange

六、Exchange 接收到消息後,根據消息的Key和已經設置的Binding,進行消息路由,將消息投遞到一個或者多個Queue裏。

Exchange 也有幾種類型。

1.Direct交換機:徹底根據Key進行投遞,好比,綁定時設置了Routing Key爲abc,那麼客戶端提供的消息,只有設置了Key爲abc的纔會被投遞到隊列。

2.Topic交換機:對Key進行模式匹配後進行投遞,可使用符號#匹配一個或多個詞,符號*匹配正好一個詞。好比,abc.#匹配 abc.def.ghi,abc.*只匹配abc.def。

3.Fanout交換機:不須要任何Key,它採起了廣播的模式,一個消息進來時,投遞到與該交換機綁定的全部隊列。

RabbitMQ支持消息的持久化,也就是將數據寫在磁盤上。爲了數據安全考慮,大多數狀況下都會選擇持久化。消息隊列持久化包含三部分:

1.Exchange持久化,在聲明時指定durable=>1.

2.Queue持久化,在聲明時指定durable=>1.

3.消息持久化,在投遞時指定deleivery_mode=>2(1是非持久化)

若是Exchange和Queue都是持久化的,它們之間的Binding也是持久化的,若是一個是非持久化的,一個是持久化的就不容許簡單綁定。

相關文章
相關標籤/搜索