天天看點

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

作者:老吾頻道

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

RabbitMQ

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

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

AMQP代表進階消息隊列協定,是一個開放的應用層協定标準,用于設計面向消息的中間件。

Erlang語言主要用于開發并發和分布式系統,在電信領域得到廣泛應用。除此之外,還有一些基于Erlang開發的中間件和工具庫,如OTP(Open Telecom Platform)。

(此處已添加書籍卡片,請到今日頭條用戶端檢視)

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大架構原理圖解)

消息通常由兩個主要部分組成:

  1. 消息内容(Payload):一般是包含業務邏輯結構的資料,例如 JSON 格式的字元串。
  2. 消息辨別(Label):用于描述消息的資訊,比如交換器的名稱和路由鍵等。

這兩個部分共同構成了消息的内容和描述,使得消息能夠被正确地路由和處理。

2.Consumer

消息消費者是指用于接收消息的程式。

消費者會監聽RabbitMQ中的隊列(Queue),并從隊列中擷取消息進行消費。

需要注意的是,消息會一直保留在隊列中,直到被消費者接收和處理。

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 就能夠根據綁定鍵正确地将消息路由到相應的隊列中。這種綁定關系的建立可以靈活地控制消息的路由行為。

(此處已添加書籍卡片,請到今日頭條用戶端檢視)