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

mikechen的網際網路架構發表於2022-09-29

為什麼要使用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將按順序將每條訊息傳送給下一個消費者,平均而言,每個消費者將獲得相同數量的訊息,這種分發訊息的方式稱為迴圈法。


以上

作者簡介

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


閱讀mikechen的網際網路架構更多技術文章合集

| | | | | |


關注「mikechen 的網際網路架構」公眾號,回覆 【架構】領取 《Java進階架構思維導圖&Java進階架構文章合集》


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011997/viewspace-2916680/,如需轉載,請註明出處,否則將追究法律責任。

相關文章