RabbitMQ原理和架構圖解(附6大工作模式)

為什麼要使用RabbitMQ?

1.解耦

系統A在程式碼中直接調用系統B和系統C的程式碼,如果將來D系統接入,系統A還需要修改程式碼,過於麻煩。

2.非同步

將消息寫入消息隊列,非必要的業務邏輯以非同步的方式運行,加快響應速度。

3.削峰

並發量大的時候,所有的請求直接懟到資料庫,造成資料庫連接異常。

 

RabbitMQ原理和架構

RabbitMQ的技術架構如下圖所示:

1.生產者(Publisher)

發消息到RabbitMQ中的(Exchange)交換機上。

2.交換機(Exchange)

和生產者建立連接並接收生產者發來的消息

3.消費者(Consumer)

監聽RabbitMQ中的(Queue)隊列中的消息

4.隊列(Queue)

Exchange將消息發送到指定的Queue中,Queue和消費者進行交互

5.路由(Routes)

交換機轉發消息到隊列的規則

 

RabbitMQ的核心概念

1)Broker

Broker,簡單來說就是消息隊列伺服器實體。

 

2)Exchange

Exchange(消息交換機),它指定消息按什麼規則,路由到哪個隊列。

 

3)Queue

Queue(消息隊列載體),每個消息都會被投入到一個或多個隊列。

 

4)Binding

Binding(綁定),它的作用就是把exchange和queue按照路由規則綁定起來。

 

5)Routing Key

Routing Key(路由關鍵字),exchange根據這個關鍵字進行消息投遞;

 

6)VHost

vhost 可以理解為虛擬 broker ,即 mini-RabbitMQ server。其內部均含有獨立的 queue、exchange 和 binding 等,但最最重要的是,其擁有獨立的許可權系統,可以做到 vhost 範圍的用戶控制。當然,從 RabbitMQ 的全局角度,vhost 可以作為不同許可權隔離的手段(一個典型的例子就是不同的應用可以跑在不同的 vhost 中);

 

7)Producer

Producer(消息生產者),就是投遞消息的程式;

 

8)Consumer

Consumer(消息消費者),就是接受消息的程式;

 

9)Channel

Channel(消息通道),在客戶端的每個連接里,可建立多個channel,每個channel代表一個會話任務。

 

RabbitMQ 的工作模式?

RabbitMQ提供了6種模式:

1、簡單模式

生產者,一個隊列一個或多個消費者,當多個消費者同時監聽一個隊列時,他們並不能同時消費一條消息,而是隨機消費消息,即一個隊列中一條消息,只能被一個消費者消費。

2、主題模式(topic)

生產者,一個交換機(topicExchange),模糊匹配路由規則,多個隊列,多個消費者。

3、訂閱與發布模式(fanout)

生產者,一個交換機(fanoutExchange),沒有路由規則,多個隊列,多個消費者。生產者將消息不是直接發送到隊列,而是發送到X交換機,然後由交換機發送給兩個隊列,兩個消費者各自監聽一個隊列,來消費消息。

4、路由模式(direct)

生產者,一個交換機(directExchange),路由規則,多個隊列,多個消費者。主要根據定義的路由規則決定消息往哪個隊列發送。

5、RPC模式

對於RPC請求,客戶端發送一條帶有兩個屬性的消息:replyTo,設置為僅為請求創建的匿名獨佔隊列,和correlationId,設置為每個請求的唯一id值。請求被發送到rpc_queue隊列。RPC工作進程在隊列上等待請求。當一個請求出現時,它執行任務,並使用replyTo欄位中的隊列將結果發回客戶機。客戶機在回應消息隊列上等待數據。當消息出現時,它檢查correlationId屬性。如果匹配請求中的值,則向程式返回該響應數據。

6、工作隊列

注釋:默認情況下,RabbitMQ將按順序將每條消息發送給下一個消費者,平均而言,每個消費者將獲得相同數量的消息,這種分發消息的方式稱為循環法。

以上

作者簡介

陳睿|mikechen,10年+大廠架構經驗,《BAT架構技術500期》系列文章作者,專註於互聯網架構技術。

閱讀mikechen的互聯網架構更多技術文章合集

Java並發|JVM|MySQL|Spring|Redis|分散式|高並發