国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RocketMQ教程-(5)-功能特性-消息發(fā)送重試和流控機(jī)制

這篇具有很好參考價(jià)值的文章主要介紹了RocketMQ教程-(5)-功能特性-消息發(fā)送重試和流控機(jī)制。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文為您介紹 Apache RocketMQ 的消息發(fā)送重試機(jī)制和消息流控機(jī)制。

背景信息?

消息發(fā)送重試

Apache RocketM Q的消息發(fā)送重試機(jī)制主要為您解答如下問題:

  • 部分節(jié)點(diǎn)異常是否影響消息發(fā)送?

  • 請求重試是否會(huì)阻塞業(yè)務(wù)調(diào)用?

  • 請求重試會(huì)帶來什么不足?

消息流控

Apache RocketMQ 的流控機(jī)制主要為您解答如下問題:

  • 系統(tǒng)在什么情況下會(huì)觸發(fā)流控?

  • 觸發(fā)流控時(shí)客戶端行為是什么?

  • 應(yīng)該如何避免觸發(fā)流控,以及如何應(yīng)對突發(fā)流控?

消息發(fā)送重試機(jī)制

重試基本概念?

Apache RocketMQ 客戶端連接服務(wù)端發(fā)起消息發(fā)送請求時(shí),可能會(huì)因?yàn)榫W(wǎng)絡(luò)故障、服務(wù)異常等原因?qū)е抡{(diào)用失敗。為保證消息的可靠性, Apache RocketMQ 在客戶端SDK中內(nèi)置請求重試邏輯,嘗試通過重試發(fā)送達(dá)到最終調(diào)用成功的效果。同步發(fā)送和異步發(fā)送模式均支持消息發(fā)送重試。

重試觸發(fā)條件

觸發(fā)消息發(fā)送重試機(jī)制的條件如下:

  • 客戶端消息發(fā)送請求調(diào)用失敗或請求超時(shí)

  • 網(wǎng)絡(luò)異常造成連接失敗或請求超時(shí)。

  • 服務(wù)端節(jié)點(diǎn)處于重啟或下線等狀態(tài)造成連接失敗。

  • 服務(wù)端運(yùn)行慢造成請求超時(shí)。

  • 服務(wù)端返回失敗錯(cuò)誤碼

    • 系統(tǒng)邏輯錯(cuò)誤:因運(yùn)行邏輯不正確造成的錯(cuò)誤。

    • 系統(tǒng)流控錯(cuò)誤:因容量超限造成的流控錯(cuò)誤。

    • 對于事務(wù)消息,只會(huì)進(jìn)行透明重試(transparent retries),網(wǎng)絡(luò)超時(shí)或異常等場景不會(huì)進(jìn)行重試。

重試流程?

生產(chǎn)者在初始化時(shí)設(shè)置消息發(fā)送最大重試次數(shù),當(dāng)出現(xiàn)上述觸發(fā)條件的場景時(shí),生產(chǎn)者客戶端會(huì)按照設(shè)置的重試次數(shù)一直重試發(fā)送消息,直到消息發(fā)送成功或達(dá)到最大重試次數(shù)重試結(jié)束,并在最后一次重試失敗后返回調(diào)用錯(cuò)誤響應(yīng)。

  • 同步發(fā)送:調(diào)用線程會(huì)一直阻塞,直到某次重試成功或最終重試失敗,拋出錯(cuò)誤碼和異常。

  • 異步發(fā)送:調(diào)用線程不會(huì)阻塞,但調(diào)用結(jié)果會(huì)通過異常事件或者成功事件返回。

重試間隔?

  • 除服務(wù)端返回系統(tǒng)流控錯(cuò)誤場景,其他觸發(fā)條件觸發(fā)重試后,均會(huì)立即進(jìn)行重試,無等待間隔。

  • 若由于服務(wù)端返回流控錯(cuò)誤觸發(fā)重試,系統(tǒng)會(huì)按照指數(shù)退避策略進(jìn)行延遲重試。指數(shù)退避算法通過以下參數(shù)控制重試行為:

    • INITIAL_BACKOFF: 第一次失敗重試前后需等待多久,默認(rèn)值:1秒。

    • MULTIPLIER :指數(shù)退避因子,即退避倍率,默認(rèn)值:1.6。

    • JITTER :隨機(jī)抖動(dòng)因子,默認(rèn)值:0.2。

    • MAX_BACKOFF :等待間隔時(shí)間上限,默認(rèn)值:120秒

    • MIN_CONNECT_TIMEOUT :最短重試間隔,默認(rèn)值:20秒。

    • 建議算法如下:

    • ConnectWithBackoff()
        current_backoff = INITIAL_BACKOFF
        current_deadline = now() + INITIAL_BACKOFF
        while (TryConnect(Max(current_deadline, now() + MIN_CONNECT_TIMEOUT))!= SUCCESS)
          SleepUntil(current_deadline)
          current_backoff = Min(current_backoff * MULTIPLIER, MAX_BACKOFF)
          current_deadline = now() + current_backoff + UniformRandom(-JITTER * current_backoff, JITTER * current_backoff)

      更多信息,請參見connection-backoff 策略。

功能約束?

  • 鏈路耗時(shí)阻塞評估:從上述重試機(jī)制可以看出,在重試流程中生產(chǎn)者僅能控制最大重試次數(shù)。若由于系統(tǒng)異常觸發(fā)了SDK內(nèi)置的重試邏輯,則服務(wù)端需要等待最終重試結(jié)果,可能會(huì)導(dǎo)致消息發(fā)送請求鏈路被阻塞。對于某些實(shí)時(shí)調(diào)用類場景,您需要合理評估每次調(diào)用請求的超時(shí)時(shí)間以及最大重試次數(shù),避免影響全鏈路的耗時(shí)。

  • 最終異常兜底: Apache RocketMQ 客戶端內(nèi)置的發(fā)送請求重試機(jī)制并不能保證消息發(fā)送一定成功。當(dāng)最終重試仍然失敗時(shí),業(yè)務(wù)方調(diào)用需要捕獲異常,并做好冗余保護(hù)處理,避免消息發(fā)送結(jié)果不一致。

  • 消息重復(fù)問題:因遠(yuǎn)程調(diào)用的不確定性,當(dāng)Apache RocketMQ客戶端因請求超時(shí)觸發(fā)消息發(fā)送重試流程,此時(shí)客戶端無法感知服務(wù)端的處理結(jié)果,客戶端進(jìn)行的消息發(fā)送重試可能會(huì)產(chǎn)生消息重復(fù)問題,業(yè)務(wù)邏輯需要自行處理消息重復(fù)問題。

消息流控機(jī)制?

消息流控基本概念?

消息流控指的是系統(tǒng)容量或水位過高, Apache RocketMQ 服務(wù)端會(huì)通過快速失敗返回流控錯(cuò)誤來避免底層資源承受過高壓力。

觸發(fā)條件?

Apache RocketMQ 的消息流控觸發(fā)條件如下:

  • 存儲(chǔ)壓力大:參考消費(fèi)進(jìn)度管理的原理機(jī)制,消費(fèi)者分組的初始消費(fèi)位點(diǎn)為當(dāng)前隊(duì)列的最大消費(fèi)位點(diǎn)。若某些場景例如業(yè)務(wù)上新等需要回溯到指定時(shí)刻前開始消費(fèi),此時(shí)隊(duì)列的存儲(chǔ)壓力會(huì)瞬間飆升,觸發(fā)消息流控。

  • 服務(wù)端請求任務(wù)排隊(duì)溢出:若消費(fèi)者消費(fèi)能力不足,導(dǎo)致隊(duì)列中有大量堆積消息,當(dāng)堆積消息超過一定數(shù)量后會(huì)觸發(fā)消息流控,減少下游消費(fèi)系統(tǒng)壓力。

流控行為?

當(dāng)系統(tǒng)觸發(fā)消息發(fā)送流控時(shí),客戶端會(huì)收到系統(tǒng)限流錯(cuò)誤和異常,錯(cuò)誤碼信息如下:

  • reply-code:530

  • reply-text:TOO_MANY_REQUESTS

客戶端收到系統(tǒng)流控錯(cuò)誤碼后,會(huì)根據(jù)指數(shù)退避策略進(jìn)行消息發(fā)送重試。

處理建議?

  • 如何避免觸發(fā)消息流控:觸發(fā)限流的根本原因是系統(tǒng)容量或水位過高,您可以利用可觀測性功能監(jiān)控系統(tǒng)水位容量等,保證底層資源充足,避免觸發(fā)流控機(jī)制。

  • 突發(fā)消息流控處理:如果因?yàn)橥话l(fā)原因觸發(fā)消息流控,且客戶端內(nèi)置的重試流程執(zhí)行失敗,則建議業(yè)務(wù)方將請求調(diào)用臨時(shí)替換到其他系統(tǒng)進(jìn)行應(yīng)急處理。文章來源地址http://www.zghlxwxcb.cn/news/detail-608898.html

到了這里,關(guān)于RocketMQ教程-(5)-功能特性-消息發(fā)送重試和流控機(jī)制的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【微服務(wù)】04-Polly實(shí)現(xiàn)失敗重試和限流熔斷

    【微服務(wù)】04-Polly實(shí)現(xiàn)失敗重試和限流熔斷

    1.1 Polly組件包 Polly Polly.Extensions.Http Microsoft.Extensions.Http.Polly 1.2 Polly的能力 失敗重試 服務(wù)熔斷 ? 部分服務(wù)不可用時(shí),可以快速響應(yīng)熔斷,避免持續(xù)請求不可用服務(wù)而導(dǎo)致整個(gè)應(yīng)用程序宕掉 超時(shí)處理 ? 請求響應(yīng)超過設(shè)置的時(shí)間,可按照預(yù)定的操作進(jìn)行處理 艙壁隔離 ? 為服

    2024年02月11日
    瀏覽(26)
  • RabbitMQ的消費(fèi)者處理消息失敗后可以重試,重試4次仍然失敗發(fā)送到死信隊(duì)列。

    RabbitMQ的消費(fèi)者處理消息失敗后可以重試,重試4次仍然失敗發(fā)送到死信隊(duì)列。

    生產(chǎn)者發(fā)送消息時(shí)采用雪花算法給消息設(shè)置唯一的消息id,消費(fèi)者接收消息處理失敗時(shí),根據(jù)消息的唯一id統(tǒng)計(jì)失敗次數(shù),若沒有達(dá)到失敗次數(shù)限制,則讓消息重回隊(duì)列(在開啟手動(dòng)簽收的前提),此時(shí)隊(duì)列會(huì)再次給消費(fèi)者發(fā)送消息;若達(dá)到失敗次數(shù)限制,則讓消息不重回隊(duì)列,

    2024年02月07日
    瀏覽(92)
  • RocketMQ 發(fā)送批量消息、過濾消息和事務(wù)消息

    RocketMQ 發(fā)送批量消息、過濾消息和事務(wù)消息

    前面我們知道RocketMQ 發(fā)送延時(shí)消息與順序消息,現(xiàn)在我們看下怎么發(fā)送批量消息、過濾消息和事務(wù)消息。 限制是這些批量消息應(yīng)該有相同的 topic,相同的 waitStoreMsgOK,而且不能是延時(shí)消息。 此外,這一批消息的總大小不應(yīng)超過4MB。 消息的生產(chǎn)者 消息的消費(fèi)者 消息分割 如果

    2023年04月21日
    瀏覽(20)
  • RocketMQ發(fā)送消息失敗排查

    RocketMQ發(fā)送消息失敗排查

    錯(cuò)誤信息: 錯(cuò)誤截圖: 查看結(jié)果: 說明:發(fā)現(xiàn)對應(yīng)的訂閱組已經(jīng)離線(查看對應(yīng)的項(xiàng)目MQ地址和配置都是正確的),然后從服務(wù)日志中也看不出更多的問題 說明:調(diào)整服務(wù)日志級(jí)別到info,通過詳細(xì)的日志信息定位發(fā)送失敗的原因 日志截圖: 說明:日志不斷打印 closeChanne

    2024年02月04日
    瀏覽(25)
  • RocketMQ發(fā)送消息超時(shí)異常

    RocketMQ發(fā)送消息超時(shí)異常

    說明:在使用RocketMQ發(fā)送消息時(shí),出現(xiàn)下面這個(gè)異常(org.springframework.messging.MessgingException:sendDefaultImpl call timeout……); 解決:修改RocketMQ中broke.conf配置,添加下面這兩行配置,重啟服務(wù)后再試就可以了; 啟動(dòng)時(shí),注意使用下面的命令,帶上配置文件

    2024年02月13日
    瀏覽(22)
  • RocketMQ發(fā)送消息

    RocketMQ發(fā)送消息

    目錄 一.消費(fèi)模式?編輯 二.發(fā)送消息 1.普通消息 同步消息(***)? 異步消息(***) 單向消息(*) 日志服務(wù)的編寫思路 2.延遲消息(***) 延遲等級(jí)? 3.批量消息 4.順序消息(*) 三.Tag過濾 訂閱關(guān)系的一致性 ①訂閱一個(gè)Topic且訂閱一個(gè)Tag ②訂閱一個(gè)Topic且訂閱多個(gè)Tag ③訂閱多個(gè)Topic且訂閱多

    2024年02月11日
    瀏覽(23)
  • rocketMQ-console 發(fā)送消息

    rocketMQ-console 發(fā)送消息

    rocketMQ-console是一款非常使用的rocketMQ擴(kuò)展工具 工具代碼倉 mirrors / apache / rocketmq-externals · GitCode 安裝詳細(xì)教程 ??????rocketMQ學(xué)習(xí)筆記二:RocketMQ-Console安裝、使用詳解_麥田里的碼農(nóng)-CSDN博客_rocketmq-consoled 直接來到工具頁面 ,右上角可以切換語言 發(fā)送消息流程 1.點(diǎn)擊 最

    2024年02月14日
    瀏覽(19)
  • RocketMQ如何安全的批量發(fā)送消息?

    優(yōu)點(diǎn): 批量發(fā)送消息可以提高rocketmq的生產(chǎn)者性能和吞吐量。 使用場景: 發(fā)送大量小型消息時(shí); 需要降低消息發(fā)送延遲時(shí); 需要提高生產(chǎn)者性能時(shí); 注意事項(xiàng): 消息列表的大小不能超過broker設(shè)置的最大消息大小; 消息列表的大小不能超過生產(chǎn)證設(shè)置的maxMessageSize 參數(shù),此參

    2024年02月03日
    瀏覽(48)
  • 13.RocketMQ之消息的存儲(chǔ)與發(fā)送

    13.RocketMQ之消息的存儲(chǔ)與發(fā)送

    分布式隊(duì)列因?yàn)橛懈呖煽啃缘囊螅詳?shù)據(jù)要進(jìn)行持久化存儲(chǔ)。 消息生成者發(fā)送消息 Broker收到消息,將消息進(jìn)行持久化,在存儲(chǔ)中新增一條記錄 返回ACK給生產(chǎn)者 Broker消息給對應(yīng)的消費(fèi)者,然后等待消費(fèi)者返回ACK 如果消息消費(fèi)者在指定時(shí)間內(nèi)成功返回ack,那么MQ認(rèn)為消息消

    2024年02月11日
    瀏覽(22)
  • [RocketMQ] Producer發(fā)送消息的總體流程 (七)

    [RocketMQ] Producer發(fā)送消息的總體流程 (七)

    單向發(fā)送: 把消息發(fā)向Broker服務(wù)器, 不管Broker是否接收, 只管發(fā), 不管結(jié)果。 同步發(fā)送: 把消息發(fā)向Broker服務(wù)器, 如果Broker成功接收, 可以得到Broker的響應(yīng)。 異步發(fā)送: 把消息發(fā)向Broker服務(wù)器, 如果Broker成功接收, 可以得到Broker的響應(yīng)。異步所以發(fā)送消息后, 不用等待, 等到Broker服

    2024年02月11日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包