目錄
一、為什么會出現(xiàn)消息中間件?
二、消息中間件是干嘛的?
三、應(yīng)用解耦
四、流量削峰
五、異步處理
1.串行方式:
2.并行方式:
3.引入消息隊列:
?六、RocketMQ的架構(gòu)及概念
一、為什么會出現(xiàn)消息中間件?
Http請求默認采用同步請求方式,基于請求與響應(yīng)模式,在客戶端與服務(wù)器進行通訊 時,客戶端調(diào)用服務(wù)端接口后,必須等待服務(wù)端完成處理后返回結(jié)果給客戶端才能繼續(xù)執(zhí)行,這種情況 屬于同步調(diào)用方式。如果服務(wù)器端發(fā)生網(wǎng)絡(luò)延遲、不可達的情況,可能客戶端也會受到影響,為了解決這個問題,消息中間件就產(chǎn)生了。
二、消息中間件是干嘛的?
消息中間件利用高效可靠的消息傳遞機制進行平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng) 的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環(huán)境下擴展進程間的通信。對于消息中間件,常見的角色大致也就有Producer(生產(chǎn)者)、Consumer(消費者)例如:寄快遞
?
三、應(yīng)用解耦
如果系統(tǒng)的耦合性越高,容錯性就越低,以電商應(yīng)用為例,用戶創(chuàng)建訂單后, 如果耦合調(diào)用庫存系統(tǒng)、物流系統(tǒng)、支付系統(tǒng),任何一個子系統(tǒng)出了故障 或者因為升級等原因暫時不可用,都會造成下單操作異常!
使用消息隊列解耦,系統(tǒng)的耦合性就會下降了,比如物流系統(tǒng)發(fā)生故障, 需要幾分鐘才能修復(fù),在這段時間內(nèi),物流系統(tǒng)要處理的數(shù)據(jù)被緩存到消息隊列中,用戶的下單操作正常完成。當物流系統(tǒng)恢復(fù)后,補充處理存在 消息隊列中的訂單消息即可,終端系統(tǒng)感知不到物流系統(tǒng)發(fā)生過幾分鐘故障。
舉例說明:
訂單系統(tǒng):用戶下單后,訂單系統(tǒng)完成持久化處理,將消息寫入消息隊列,返回用戶下單成功
庫存系統(tǒng):訂單下單的消息,采用拉/推的方式,獲取下單信息,庫存系統(tǒng)根據(jù)下單信息,進行
?? ??? ??? ??? ??? ??? ?庫存操作
假如:在下單時庫存系統(tǒng)不能正常使用,也不影響正常下單,因為下單后,訂單系統(tǒng)寫入消息
?? ?隊列就不再關(guān)心其他的后續(xù)操作了。實現(xiàn)了訂單系統(tǒng)與庫存系統(tǒng)的應(yīng)用解耦。
四、流量削峰
應(yīng)用系統(tǒng)如果遇到系統(tǒng)請求流量的瞬間猛增,有可能將系統(tǒng)壓垮,有了消 息隊列可以將大量請求緩存起來,分散到很長一段時間處理,這樣可以大大提高系統(tǒng)的穩(wěn)定性
?舉例說明:
秒殺活動,一般會因為流量過大,導(dǎo)致流量暴增,應(yīng)用掛掉。為了解決這個問題,一般需要 在應(yīng)用前端加入消息隊列。
五、異步處理
用戶注冊后,需要發(fā)注冊郵件和注冊短信 傳統(tǒng)的做法有兩種
1.串行方式:
將注冊信息寫入數(shù)據(jù)庫成功后,發(fā)送注冊郵件,再發(fā)送注冊短信,以上三個任務(wù)全部完成 后,返回給客戶端
2.并行方式:
將注冊信息寫入數(shù)據(jù)庫成功后,發(fā)送注冊郵件的同時發(fā)送注冊短信,以上三個任務(wù)完成 后,返回給客戶端;與串行的差別是并行的方式可以提高處理的時間
3.引入消息隊列:
?六、RocketMQ的架構(gòu)及概念
Broker(郵遞員)?:Broker是RocketMQ的核心,負責消息的接收,存儲,投遞等功能
NameServer(郵局) :消息隊列的協(xié)調(diào)者,Broker向它注冊路由信息,同時Producer和Consumer向其獲取路由信息
Producer(寄件人) :消息的生產(chǎn)者,需要從NameServer獲取Broker信息,然后與Broker建立連接,向Broker發(fā)送消息
Consumer(收件人) :消息的消費者,需要從NameServer獲取Broker信息,然后與Broker建立連接,從Broker獲取消息
Topic(地區(qū)) :用來區(qū)分不同類型的消息,發(fā)送和接收消息前都需要先創(chuàng)建Topic,針對Topic來發(fā)送和接收 消息
Message Queue(郵件) :為了提高性能和吞吐量,引入了Message Queue,一個Topic可以設(shè)置一個或多個Message Queue,這樣消息就可以并行往各個Message Queue發(fā)送消息,消費者也可以并行的從多個 Message Queue讀取消息
Message: Message 是消息的載體。文章來源:http://www.zghlxwxcb.cn/news/detail-689297.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-689297.html
到了這里,關(guān)于RocketMQ(消息中間件)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!