您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)怎么理解RabbitMQ在一線大廠中的基礎(chǔ)組件架構(gòu)設(shè)計思路,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
MQ組件實現(xiàn)功能點 1) 支持消息高性能的序列化轉(zhuǎn)換、異步化發(fā)送消息 2) 支持消息生產(chǎn)實例與消費實例的連接池化緩存化,提升性能 3) 支持可靠性投遞消息,保證消息的100%不丟失 4) 支持消費端的冪等操作,避免消費端重復(fù)消費問題 5) 支持迅速消息發(fā)送模式,有些場景下不需要保證100%成功投遞,在一些日志收集、統(tǒng)計分析等需求下可以保證高性能、超高吞吐量 6) 支持延遲消息模式,消息可以延遲發(fā)送,指定延遲時間,用于某些延遲檢查、服務(wù)限流場景 7) 支持事務(wù)消息,且100%保障可靠性投遞,在金融行業(yè)單筆大金額操作時會有此類需求 8) 支持順序消息,保證消息送達(dá)消費端的前后順序,例如下訂單等復(fù)合型操作 9) 支持消息補(bǔ)償、重試,快速定位異常
迅速消息發(fā)送是指消息不進(jìn)行落庫存儲,不做可靠性保證. 在一些非核心消息、日志數(shù)據(jù)、或者統(tǒng)計分析等場景下比較合適. 迅速消息 的優(yōu)點就是性能最高,吞吐量最大
批量消息是指我們把消息放到一個集合里統(tǒng)一進(jìn)行提交,將消息合并,對于channel而言,就是發(fā)送一次消息,這種方式也是希望消費端在 消費的時候,可以進(jìn)行批量化消費,但是不保證可靠性,需要進(jìn)行補(bǔ)償機(jī)制RabbitMQ不支持消息批量發(fā)送,可以自己實現(xiàn)
延遲消息相對簡單,就是我們在Message封裝的時候添加delayTime屬性即可,使得我們消息可以進(jìn)行延遲發(fā)送,根據(jù)具體的業(yè)務(wù)場景可以 很好的用到! 場景舉例: 1) 比如在電商平臺買到的商品簽收后,不點擊確認(rèn)支付,那么系統(tǒng)自動會在7天去進(jìn)行支付操作 2) 還有一些自動超時作廢的場景,如優(yōu)惠券/紅包有使用時間限制,也可以使用延遲消息機(jī)制
要保障以下幾點: 1) 發(fā)送的順序消息,必須保障消息投遞到同一個隊列,且這個消費者只能有一個(獨占模式) 2) 然后需要統(tǒng)一提交(可能是合并成一個大消息,也可以是拆分成多個小消息),并且所有消息的會話ID一致 3) 添加消息的屬性:順序標(biāo)記的序號、本次順序消息的SIZE屬性,先不消費消息,消費端收到后進(jìn)行消息落庫 4) 并行進(jìn)行發(fā)送給自身的延遲消息,注意帶上關(guān)鍵屬性(會話ID、SIZE)進(jìn)行后續(xù)處理消費,確保延遲的事件段中這一批消息都已經(jīng)全部收到 5) 當(dāng)收到延遲消息后,根據(jù)會話ID、SIZE抽取數(shù)據(jù)庫數(shù)據(jù)進(jìn)行處理即可 6) 定時輪詢補(bǔ)償機(jī)制,對于異常情況,如生產(chǎn)端消息沒有完全投遞成功、或者消費端落庫異常,導(dǎo)致消費端落庫后缺少消息條目的情況
我們采用類似可靠性投遞的機(jī)制,也就是補(bǔ)償機(jī)制. 我們使用的數(shù)據(jù)源必須是同一個,也就是業(yè)務(wù)操作DB1數(shù)據(jù)庫和消息記錄DB2數(shù)據(jù)庫使用同一個數(shù)據(jù)源 然后重寫Spring DataSourceTransactionManager,在本地事務(wù)提交的時候進(jìn)行發(fā)送消息,但是也有可能事務(wù)提交成功但是消息發(fā)送失敗,這個 時候就需要進(jìn)行補(bǔ)償了
可能導(dǎo)致消息出現(xiàn)非冪等的原因: 1) 可靠性消息投遞機(jī)制 2) MQ Broker服務(wù)與消費端傳輸消息的過程中的網(wǎng)絡(luò)抖動 3) 消費端故障或異常
關(guān)于怎么理解RabbitMQ在一線大廠中的基礎(chǔ)組件架構(gòu)設(shè)計思路就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。