更新時間:2021-12-14 09:32:09 來源:動力節(jié)點 瀏覽1010次
很多剛開始學(xué)習(xí)Java的小伙伴對RabbitMQ還不是很了解,RabbitMQ是使用Erlang語言開發(fā)的開源消息隊列系統(tǒng),基于AMQP協(xié)議來實現(xiàn)。AMQP的主要特征是面向消息、隊列、路由(包括點對點和發(fā)布/訂閱)、可靠性、 安全。AMQP協(xié)議更多用在企業(yè)系統(tǒng)內(nèi),對數(shù)據(jù)一致性、穩(wěn)定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。
MQ全稱為Message Queue, 消息隊列(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。應(yīng)用程序通過讀寫出入隊列的消息(針對應(yīng)用程序的數(shù)據(jù))來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進(jìn)行通信,而不是通過直接調(diào)用彼此來通信,直接調(diào)用通常是用于諸如遠(yuǎn)程過程調(diào)用的技術(shù)。排隊指的是應(yīng)用程序通過 隊列來通信。隊列的使用除去了接收和發(fā)送應(yīng)用程序同時執(zhí)行的要求。
當(dāng)發(fā)送短信執(zhí)行成功后頁面才執(zhí)行倒計時60秒,假如在發(fā)送短信時網(wǎng)速原因,導(dǎo)致短信一直被阻塞,那么倒計時也會被一直延遲,這樣及其影響用戶體驗感。
這時候就可以使用RabbitMQ了,將發(fā)送短信和倒計時解耦,基于消息的模型,關(guān)心的是“通知”,而非“處理”。
像下訂單、郵件通知、緩存刷新等操作都可以使用消息隊列進(jìn)行優(yōu)化。
場景說明:用戶需發(fā)送短信驗證碼時,點擊發(fā)送短信,第三方平臺發(fā)送短信至用戶手機成功,執(zhí)行倒計時60秒。傳統(tǒng)的做法有兩種 1.串行的方式;2.并行方式:
(1)串行方式:將用戶點擊發(fā)送短信,第三方平臺發(fā)送短信至用戶手機成功,執(zhí)行倒計時60秒。以上三個任務(wù)全部完成后,返回給客戶端(響應(yīng)150ms)。
(2)并行方式:在用戶點擊發(fā)送短信成功后,第三方平臺發(fā)送短信的同時,執(zhí)行倒計時60秒。與串行的差別是,并行的方式可以提高處理的時間(響應(yīng)100ms)。
(3)引入消息隊列,將不是必須的業(yè)務(wù)邏輯,異步處理(55ms)。改造后的架構(gòu)如下:
流量削鋒(流量錯峰)也是消息隊列中的常用場景,一般在秒殺或團搶活動中使用廣泛。
應(yīng)用場景:系統(tǒng)其他時間A系統(tǒng)每秒請求量就100個,系統(tǒng)可以穩(wěn)定運行。系統(tǒng)每天晚間八點有秒殺活動,每秒并發(fā)請求量增至5000條,但是系統(tǒng)最大的處理能力只能每秒處理2000個請求(因為MySQL每秒只能處理2000個請求,MySQL的缺點:在海量數(shù)據(jù)處理與熱數(shù)據(jù)時,效率會顯著變慢),于是系統(tǒng)崩潰,服務(wù)器宕機。
引入RabbitMQ:系統(tǒng)A從RabbitMQ中慢慢拉取請求,每秒就拉取2000個請求,不要超過自己每秒能處理的請求數(shù)量即可。RabbitMQ,每秒5000個請求進(jìn)來,結(jié)果只有2000個請求出去,所以在秒殺期間(將近一小時)可能會有幾十萬或者幾百萬的請求積壓在RabbitMQ中。這個短暫的高峰期積壓是沒問題的,因為高峰期過了之后,每秒就只有50個請求進(jìn)入RabbitMQ了,但是系統(tǒng)還是按照每秒2000個請求的速度在處理,所以說,只要高峰期一過,系統(tǒng)就會快速將積壓的消息消費掉。我們在此計算一下,每秒在RabbitMQ積壓3000條消息,1分鐘會積壓18萬,1小時積壓1000萬條消息,高峰期過后,1個多小時就可以將積壓的1000萬消息消費掉。
以上就是關(guān)于“RabbitMQ的使用場景”的介紹,如果您想了解更多相關(guān)知識,可以關(guān)注一下動力節(jié)點的Java在線學(xué)習(xí),里面的課程內(nèi)容豐富,由淺到深,適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對大家能夠有所幫助。
初級 202925
初級 203221
初級 202629
初級 203743