關(guān)于消息隊(duì)列中間件

*本文涉及:
RocketMQ官方文檔地址 (apache.org)

目錄

Rocket目錄

消息隊(duì)列

為什么要使用消息隊(duì)列?

消息隊(duì)列常見的使用場景核心的有 3 個(gè):解耦異步、削峰

解耦

消息隊(duì)列降低了不同服務(wù)間的耦合度。各個(gè)服務(wù)只需關(guān)心消息的生產(chǎn)和消費(fèi),而不必知道對方的具體實(shí)現(xiàn)細(xì)節(jié)。通過消息隊(duì)列作為中介,即使接收方暫時(shí)不可用或者發(fā)生變更,也不會(huì)直接影響到生產(chǎn)方的正常運(yùn)行。
例如,A系統(tǒng)與B系統(tǒng)的交互是根據(jù)直接調(diào)用接口。那么當(dāng)B系統(tǒng)不可用,或者接口做出了更新,那么這個(gè)功能將不可用。A系統(tǒng)將考慮重試、重發(fā)等方式保證業(yè)務(wù)流程。那么這種根據(jù)其他系統(tǒng)影響正常業(yè)務(wù)流程,而且隨時(shí)增加工作量、浪費(fèi)溝通成本的情況是不可容忍的。


異步

當(dāng)某些操作不需要立即響應(yīng)或可以獨(dú)立于主流程運(yùn)行時(shí),消息隊(duì)列允許系統(tǒng)以異步方式工作。
例如,用戶下訂單后,可以立即收到確認(rèn)消息,而訂單處理、庫存更新、發(fā)送郵件通知等操作則在后臺(tái)異步完成,從而極大地縮短了響應(yīng)時(shí)間,提升用戶體驗(yàn)。并且各個(gè)模塊更加專注于自己的邏輯處理,一定程度上也解耦了代碼處理,提高健壯性。


削峰

在高并發(fā)場景下,消息隊(duì)列能夠起到緩沖作用,避免大量請求直接沖擊后端服務(wù),確保系統(tǒng)穩(wěn)定。
例如,在秒殺、搶購等活動(dòng)中,短時(shí)間內(nèi)涌入的請求可以先放入隊(duì)列中逐步處理,而不是一次性全部壓垮服務(wù)。


其他

除了三大核心外,消息隊(duì)列也可以在分布式系統(tǒng)中實(shí)現(xiàn)最終一次性。即使某個(gè)服務(wù)暫時(shí)故障或網(wǎng)絡(luò)中斷,待恢復(fù)后可以從隊(duì)列中重新消費(fèi)消息,確保數(shù)據(jù)的最終正確性。消息隊(duì)列提供了錯(cuò)誤隔離與重試機(jī)制,當(dāng)消費(fèi)端處理消息失敗時(shí),消息可以重回隊(duì)列等待下次嘗試,增強(qiáng)了系統(tǒng)的穩(wěn)定性。而對于需要按照特定順序處理的消息,消息隊(duì)列可以提供有序的消息投遞能力,確保下游服務(wù)按序執(zhí)行業(yè)務(wù)邏輯。

RocketMQ

為什么使用RocketMQ?

  • 架構(gòu)差異。相比于其他MQ采用AMQP協(xié)議實(shí)現(xiàn)的復(fù)雜路由規(guī)則,RocketMQ基于Java實(shí)現(xiàn),采用自己的二進(jìn)制協(xié)議設(shè)計(jì)簡潔。
  • 性能。在阿里巴巴生態(tài)內(nèi)經(jīng)歷了雙十一等高并發(fā)場景,表現(xiàn)優(yōu)秀。尤其是在大規(guī)模消息堆積和處理時(shí),因其高效的磁盤存儲(chǔ)機(jī)制和零拷貝技術(shù),通常有更高的TPS(每秒處理的消息數(shù))。
  • 生態(tài)。國內(nèi)市場占有率較高,尤其在阿里巴巴生態(tài)內(nèi)廣泛應(yīng)用,中文社區(qū)活躍,更適合國內(nèi)開發(fā)者使用,同時(shí)也有良好的國際化支持。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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