什么是 RabbitMQ ?

RabbitMQ 就是一個(gè)用于傳遞消息的隊(duì)列中間件,幫你把消息從 A 傳給 B。主要的用途就是幫助應(yīng)用程序解耦、提高可靠性和擴(kuò)展性。

以一個(gè)最常見(jiàn)的場(chǎng)景為例

RMQ 的使用形式有多種,我們以最常用的為例,如下所示:


最常見(jiàn)的 RMQ 用法
  1. P 作為消息發(fā)布者(Publisher)將消息發(fā)送到 X 即交換機(jī)(Exchange),X 將消息分發(fā)到 Q1,Q2 兩個(gè)消息隊(duì)列(Queue)中。
  2. C1,C2 兩個(gè)消費(fèi)接收者即消費(fèi)者(Consumer),分別將自己以消費(fèi)者的身份注冊(cè)到 Q1,Q2 兩個(gè)隊(duì)列上——A.K.A. 訂閱/監(jiān)聽(tīng)。
  3. 當(dāng) Q1,Q2 內(nèi)有消息時(shí),就會(huì)將這些消息推送給他們的訂閱方,即消費(fèi)者 C1 和 C2。最終 C1 和 C2 可以根據(jù)收到的消息完成各種業(yè)務(wù)處理。

注:

  1. 例子為了簡(jiǎn)化,一個(gè)隊(duì)列 Q 只有一個(gè)消費(fèi)者 C,但其實(shí)同一個(gè) Q 是可以有多個(gè) C 訂閱的,實(shí)際運(yùn)用時(shí),后者也更常見(jiàn)。
  2. 我們能看到這里的消息發(fā)布者 P 和消息消費(fèi)者 C1,C2 不直接交互,消息是由隊(duì)列作為中間方異步傳遞的,P可以按照自己的節(jié)奏生產(chǎn)消息,C可以按照自己的節(jié)奏消費(fèi)消息,互不依賴,這就是解耦。
  3. C 因?yàn)?BUG 或者升級(jí)發(fā)生宕機(jī)或者下線時(shí),P 產(chǎn)生的消息是緩存在隊(duì)列 Q 中的,C 重新上線后可以繼續(xù)消費(fèi),所以這些消息并不會(huì)丟失。這就是可靠性。
  4. P 可能在短時(shí)間產(chǎn)生大量消息,但這并不會(huì)給 C 帶來(lái)任何壓力,因?yàn)檫@些消息會(huì)被緩存在隊(duì)列 Q 中,C 按照自己的節(jié)奏消費(fèi)處理消息即可。這也是可靠性。我們可以利用這一特性來(lái)處理業(yè)務(wù)的短時(shí)高并發(fā)。
  5. 當(dāng)一個(gè) C 消費(fèi) Q 消息的速度太慢時(shí),我們可以增加注冊(cè)更多的 C 一起來(lái)消費(fèi)。這就是擴(kuò)展性。

更多使用場(chǎng)景

理解本文的例子后,可以直接閱讀 RabbitMQ 官網(wǎng) tutorials,非常清晰易懂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容