天天看點

RabbitMQ架構詳解(7大架構原理模型圖解)

作者:mikechen的網際網路架構
RabbitMQ架構詳解(7大架構原理模型圖解)

RabbitMQ是大家經常使用的消息中間件,本篇就來談談RabbitMQ架構@mikechen

RabbitMQ定義

RabbitMQ架構詳解(7大架構原理模型圖解)

RabbitMQ是一款使用Erlang語言開發的,實作了進階消息隊列協定(AMQP)的開源消息中間件。

AMQP,即Advanced Message Queuing Protocol,進階消息隊列協定是應用層協定的一個開放标準,為面向消息的中間件設計。

Erlang語言,主要用于并發及分布式系統的開發,在電信領域應用廣泛,OTP作為Erlang語言的一部分,包含了很多基于Erlang開發的中間件及工具庫。

RabbitMQ的特點

1.可靠性:RabbitMQ使用一些機制來保證可靠性, 如持久化、傳輸确認及釋出确認等。

2.靈活的路由 :在消息進入隊列之前,通過交換器來路由消息。

3.擴充性:多個RabbitMQ節點可以組成一個叢集,也可以根據實際業務情況動态地擴充 叢集中節點。

4.高可用性:隊列可以在叢集中的機器上設定鏡像,使得在部分節點出現問題的情況下隊 列仍然可用。

5.多種協定:RabbitMQ除了原生支援AMQP協定,還支援STOMP, MQTT等多種消息 中間件協定。

6.多語言用戶端:RabbitMQ 幾乎支援所有常用語言,比如 Java、 Python、 Ruby、 PHP、 C#、 JavaScript 等。

RabbitMQ架構設計

RabbitMQ架構,如下圖所示:

RabbitMQ架構詳解(7大架構原理模型圖解)

RabbitMQ架構會涉及如下模型:Producer、Consumer、Queue、Exchange、Broker、RoutingKey、BindingKey。

RabbitMQ架構模型

RabbitMQ架構詳解(7大架構原理模型圖解)

1.Producer

消息生産者Producer:主要就是生成消息,通過信道(Channel),把消息發送給交換機(Exchange)。

RabbitMQ架構詳解(7大架構原理模型圖解)

消息一般可以包含 2 個部分:

  1. 消息體(payload):一般是一個帶有業務邏輯結構的資料,比如:一個 JSON 字元串;
  2. 标簽(Label):用來表述這條消息,比如:一個交換器的名稱和一個路由鍵;

2.Consumer

這個大家也比較清楚,就是消息消費者,就是接受消息的程式。

消費者監聽RabbitMQ中的(Queue)隊列中的消息,然後去消費。

備注:消息(Message)會一直留在隊列裡,直到被消費者(Consumer)消費。

3.Queue

用于存儲消息,如下圖所示:

RabbitMQ架構詳解(7大架構原理模型圖解)

RabbitMQ 的生産者生産消息并最終投遞到隊列中,消費者可以從隊列中擷取消息并消費。

RabbitMQ中消息都隻能存儲在隊列中,這一點和Kafka這種消息中間件相反。

多個消費者可以訂閱同一個隊列,這時隊列中的消息會被平均分攤給多個消費者進行處理,如下圖所示:

RabbitMQ架構詳解(7大架構原理模型圖解)

4.Exchange

生産者将消息發送到Exchange,由交換器将消息路由到一個或者多個隊列中。

如下圖所示:

RabbitMQ架構詳解(7大架構原理模型圖解)

這裡的互動機會涉及如下四種類型:

  1. 直接Direct;
  2. 扇出Fanout ;
  3. 主題Topic ;
  4. 消息頭Headers;

不同的類型有着不同的路由政策。

5.Broker

可以将一個RabbitMQ Broker看作一台RabbitMQ伺服器,如下圖所示:

RabbitMQ架構詳解(7大架構原理模型圖解)

上圖展示了消息從生産者存入RabbitMQ Broker,以及消費者從Broker中消費資料的完整過程。

6.Routing Key

生産者将消息發給交換器的時候,一般會指定一個 RoutingKey,用來指定這個消息的路由規則。

如下圖所示:

RabbitMQ架構詳解(7大架構原理模型圖解)

生産者可以在發送消息給交換器時,通過指定 RoutingKey 來決定消息流向哪裡。

7.BindingKey

RabbitMQ 中通過綁定将交換器與隊列關聯起來,在綁定的時候一般會指定一個綁定鍵(BindingKey),這樣 RabbitMQ 就知道如何正确地将消息路由到隊列了。

以上

更多分布式架構系列、阿裡架構師進階系列,請檢視以下文章:

阿裡架構師進階從0到1全部合集(建議收藏)

RabbitMQ架構詳解(7大架構原理模型圖解)