1. 程式人生 > >訊息佇列之RabbitMQ原理

訊息佇列之RabbitMQ原理

什麼是AMQP?

AMQP,高階訊息佇列協議,是應用層協議的一個開放標準,為面向訊息的中介軟體而設計的。基於此協議的客戶端與訊息中介軟體可以傳遞訊息,並不受客戶端/中介軟體不同產品,不同的開發語言等條件的限制。RabbitMQ就是通過Erlang語言實現的一種訊息中介軟體。

AMQP的特徵

AMQP的主要特徵是面向訊息、佇列、路由(包括點對點和釋出\訂閱模式)、可靠性、安全

JMS程式設計模型

connectionFactory、destination、connection、session(產生客戶端與訊息佇列伺服器的TCP連線)  訊息生產者、訊息消費者、訊息監聽器

RabbitMQ是什麼

RabbitMQ是一個遵循AMQP協議的訊息中介軟體,它從生產者接受訊息並傳遞給消費者,在這和過程中,根據路由規則就行路由、快取和持久化。

訊息佇列中介軟體的應用場景(不只是RabbitMQ)

  • 非同步處理:在註冊服務的時候,如果同步序列化的方式處理,讓儲存資料、郵件通知等挨著完成,延遲較大,採用訊息佇列,可以將郵件服務分離開來,將郵件任務之間放入訊息佇列中,之間返回,減少了延遲,提高了使用者體驗
  • 應用解耦:電商裡面,在訂單與庫存系統的中間新增一個訊息佇列伺服器,在使用者下單後,訂單系統將資料先進行持久化處理,然後將訊息寫入訊息佇列,直接返回訂單建立成功,然後庫存系統使用拉/推的方式,獲取訂單資訊再進行庫存操作
  • 流量削鋒:秒殺活動中,一般會因為流量過大,導致流量暴增,應用掛掉。為解決這個問題,一般需要在應用前端加入訊息佇列。  伺服器在接收到使用者請求後,首先寫入訊息佇列。這時如果訊息佇列中訊息數量超過最大數量,則直接拒絕使用者請求或返回跳轉到錯誤頁面;  秒殺業務根據秒殺規則讀取訊息佇列中的請求資訊,進行後續處理
  • 日誌處理:Kalfka訊息中介軟體

RabbitMQ的結構圖

這裡寫圖片描述

幾個概念說明:

  • Broker:簡單來說就是訊息佇列伺服器實體。
  • Exchange:訊息交換機,它指定訊息按什麼規則,路由到哪個佇列。
  • Queue:訊息佇列載體,每個訊息都會被投入到一個或多個佇列。
  • Binding:繫結,它的作用就是把exchange和queue按照路由規則繫結起來。
  • Routing Key:路由關鍵字,exchange根據這個關鍵字進行訊息投遞。
  • vhost:虛擬主機,一個broker裡可以開設多個vhost,用作不同使用者的許可權分離。
  • Producer:訊息生產者,就是投遞訊息的程式。
  • Consumer:訊息消費者,就是接受訊息的程式。
  • Channel:訊息通道,在客戶端的每個連線裡,可建立多個channel,每個channel代表一個會話任務。

訊息佇列的使用過程

1、客戶端連線到訊息佇列伺服器,開啟一個channel。  2、客戶端宣告一個exchange,並設定相關屬性。  3、客戶端宣告一個queue,並設定相關屬性。  4、客戶端使用routing key,在exchange和queue之間建立好繫結關係。  5、客戶端投遞訊息到exchange。  6、exchange接收到訊息後,就根據訊息的key和已經設由binding,進行訊息路里,將訊息投遞到一個或多個佇列裡

ps:通過durable引數來進行exchang、queue、訊息持久化

RabbitMQ交換機

RabbitMQ包含四種不同的交換機型別:

  • Direct exchange:直連交換機,轉發訊息到routigKey指定的佇列,如果訊息的routigKey和binding的routigKey直接匹配的話,訊息將會路由到該佇列
  • Fanout exchange:扇形交換機,轉發訊息到所有繫結佇列(速度最快),不管訊息的routigKey息和binding的引數表頭部資訊和值是什麼,訊息將會路由到所有的佇列
  • Topic exchange:主題交換機,按規則轉發訊息(最靈活),如果訊息的routigKey和binding的routigKey符合萬用字元匹配的話,訊息將會路由到該佇列
  • Headers exchange:首部交換機 ,如果訊息的頭部資訊和binding的引數表中匹配的話,訊息將會路由到該佇列。