華為云計算 云知識 RabbitMQ的應用場景
RabbitMQ的應用場景

RabbitMQ作為一款熱門的消息隊列中間件,具備高效可靠的消息異步傳遞機制,主要用于不同系統(tǒng)間的數(shù)據(jù)交流和傳遞,在企業(yè)解決方案、金融支付、電信、電子商務(wù)、社交、即時通信、視頻、物聯(lián)網(wǎng)、車聯(lián)網(wǎng)等眾多領(lǐng)域都有廣泛應用。

異步通信

將業(yè)務(wù)中屬于非核心或不重要的流程部分,使用消息異步通知的方式發(fā)給目標系統(tǒng),這樣主業(yè)務(wù)流程無需同步等待其他系統(tǒng)的處理結(jié)果,從而達到系統(tǒng)快速響應的目的。

如網(wǎng)站的用戶注冊場景,在用戶注冊成功后,還需要發(fā)送注冊郵件與注冊短信,這兩個流程使用RabbitMQ消息服務(wù)通知郵件發(fā)送系統(tǒng)與短信發(fā)送系統(tǒng),從而提升注冊流程的響應速度。

圖1串行發(fā)送注冊郵件與短信流程

RabbitMQ的應用場景1

圖2借助消息隊列異步發(fā)送注冊郵件與短信流程

RabbitMQ的應用場景2

錯峰流控與流量削峰

在電子商務(wù)系統(tǒng)或大型網(wǎng)站中,上下游系統(tǒng)處理能力存在差異,處理能力高的上游系統(tǒng)的突發(fā)流量可能會對處理能力低的某些下游系統(tǒng)造成沖擊,需要提高系統(tǒng)的可用性的同時降低系統(tǒng)實現(xiàn)的復雜性。電商大促銷等流量洪流突然來襲時,可以通過隊列服務(wù)堆積緩存訂單等信息,在下游系統(tǒng)有能力處理消息的時候再處理,避免下游訂閱系統(tǒng)因突發(fā)流量崩潰。消息隊列提供億級消息堆積能力,3天的默認保留時長,消息消費系統(tǒng)可以錯峰進行消息處理。

另外,在商品秒殺、搶購等流量短時間內(nèi)暴增場景中,為了防止后端應用被壓垮,可在前后端系統(tǒng)間使用RabbitMQ消息隊列傳遞請求。

圖3消息隊列應對秒殺大流量場景

RabbitMQ的應用場景3

系統(tǒng)解耦

以電商秒殺、搶購等流量短時間內(nèi)暴增場景為例,傳統(tǒng)做法是,用戶下單后,訂單系統(tǒng)發(fā)送查詢請求到庫存系統(tǒng),等待庫存系統(tǒng)返回請求結(jié)果給訂單系統(tǒng)。如果庫存系統(tǒng)發(fā)生故障,訂單系統(tǒng)獲取不到數(shù)據(jù),訂單失敗。這種情況下,訂單系統(tǒng)和庫存系統(tǒng)兩個子系統(tǒng)高耦合。

圖4系統(tǒng)高耦合

RabbitMQ的應用場景4

引入RabbitMQ消息隊列,當用戶下單后,將消息寫入到RabbitMQ消息隊列中,然后返回用戶下單成功。

庫存系統(tǒng)訂閱下單的消息,消費下單消息,然后進行庫操作。即使庫存系統(tǒng)出現(xiàn)故障,也不影響用戶下單。

圖5系統(tǒng)解耦

RabbitMQ的應用場景5

高可用

鏡像 隊列是開源RabbitMQ 2.6.0版本新增的一個功能,允許集群將隊列鏡像到其他節(jié)點上,當集群某一節(jié)點宕機后,隊列能自動切換到鏡像中的其他節(jié)點,保證服務(wù)的可用性。

普通隊列,由于隊列以及隊列內(nèi)容僅存儲在單節(jié)點上,當該節(jié)點故障后,對應的隊列不可用。

RabbitMQ引入鏡像隊列機制,將隊列鏡像到集群中的其他節(jié)點上,每一個鏡像隊列包含一個主隊列和多個從隊列,并分布在集群的不同節(jié)點上。