日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

RabbitMQ高級之失敗重試機制(含源碼)

來源: 責編: 時間:2023-11-28 09:36:26 280觀看
導讀一、失敗重試機制 當消費者出現異常后,消息會不斷requeue(重新入隊)到隊列,再重新發送給消費者,然后再次異常,再次requeue,無限循環,導致mq的消息處理飆升,帶來不必要的壓力。 為此,可利用Spring的retry機制,在消費者出現

一、失敗重試機制

    當消費者出現異常后,消息會不斷requeue(重新入隊)到隊列,再重新發送給消費者,然后再次異常,再次requeue,無限循環,導致mq的消息處理飆升,帶來不必要的壓力。Xoz28資訊網——每日最新資訊28at.com

    為此,可利用Spring的retry機制,在消費者出現異常時利用本地重試,而不是無限制的requeue到mq隊列。Xoz28資訊網——每日最新資訊28at.com

配置參數如下:Xoz28資訊網——每日最新資訊28at.com

listener: # 開啟消費者確認其機制      simple:        prefetch: 1  #消費者每次只能獲取一條消息,處理完才能獲取下一條(可實現能者多勞)        acknowledge-mode: AUTO  # none:關閉ack;manual:手動ack;auto:自動ack        retry:          enabled: true  #開啟消費者失敗重試          initial-interval: 1000ms  #初始的失敗等待時長為1秒          multiplier: 1 #下次失敗的等待時長倍數,下次等待時長 = multiplier * last-interval          max-attempts: 3 #最大重試次數          stateless: true #true無狀態;false有狀態。如果業務中包含事務,這里改為false

測試結果:Xoz28資訊網——每日最新資訊28at.com

圖片圖片Xoz28資訊網——每日最新資訊28at.com

但是重試三次后,隊列里面的消息被踢出了:Xoz28資訊網——每日最新資訊28at.com

圖片圖片Xoz28資訊網——每日最新資訊28at.com

二、失敗消息處理策略

    在開啟重試模式后,重試次數耗盡,如果消息依然失敗,則需要有MessageRecoverer接口來處理,它包含三種不同的實現:Xoz28資訊網——每日最新資訊28at.com

     1、RejectAndDontRequeueRecoverer:重試耗盡后,直接reject,丟棄消息。默認就是這種方式。Xoz28資訊網——每日最新資訊28at.com

    2、ImmediateRequeueMessageRecoverer:重試耗盡后,返回nack,消息重新入隊(不建議采用:會出現死循環)。Xoz28資訊網——每日最新資訊28at.com

     3、RepublishMessageRecoverer:重試耗盡后,將失敗消息投遞到指定的交換機。(推薦使用)Xoz28資訊網——每日最新資訊28at.com

圖片圖片Xoz28資訊網——每日最新資訊28at.com

三、實現方式

3.1、定義接收失敗消息的交換機、隊列及其綁定關系:Xoz28資訊網——每日最新資訊28at.com

/**     * 功能描述:定義接收錯誤消費的日志     * @MethodName: receiveErrorMessage     * @MethodParam: [message]     * @Return: void     * @Author: yyalin     * @CreateDate: 2023/11/15 9:55     */    @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "errorQueue"),            exchange = @Exchange(name = "errorExchange", type = ExchangeTypes.DIRECT, ignoreDeclarationExceptions = "true"),            key = "errorRouting"    ))    public void receiveErrorMessage(String message) {        log.info("消費者收到發送錯誤的消息: " + message);    }

3.2、定義RepublishMessageRecoverer:

/** * @Description: TODO:定義錯誤消息接收 * @Author: yyalin * @CreateDate: 2023/11/15 9:58 * @Version: V1.0 */@Configuration@Slf4jpublic class ErrorConfig {    @Bean    public MessageRecoverer messageRecoverer(RabbitTemplate rabbitTemplate){        log.debug("加載RepublishMessageRecoverer");        return new RepublishMessageRecoverer(rabbitTemplate,"errorExchange","errorRouting");    }}

Xoz28資訊網——每日最新資訊28at.com

3.3、測試結果:

圖片圖片Xoz28資訊網——每日最新資訊28at.com

3.4、總結

消費者如何保證消息一定被消費?Xoz28資訊網——每日最新資訊28at.com

  •     開啟消費者確認機制為auto,由spring確認消息處理成功后返回ack,異常時返回nack。如果一直處理異常會一直重試。
  •     開啟消費者失敗重試機制,并設置MessageRecoverer,多次重試失敗后將消息投遞到異常交換機,交由人工處理。

本文鏈接:http://www.www897cc.com/showinfo-26-34653-0.htmlRabbitMQ高級之失敗重試機制(含源碼)

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 雙向綁定與單向數據流之爭,Solid會取代React嗎

下一篇: 新一代WebFlux框架核心技術Reactor響應式編程基本用法

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 蓬溪县| 安仁县| 澳门| 灌阳县| 合山市| 莎车县| 泾川县| 化德县| 灵寿县| 蓝山县| 邯郸县| 文化| 郧西县| 三河市| 惠水县| 正定县| 邹城市| 灵石县| 沂源县| 大悟县| 钦州市| 安远县| 靖西县| 开封市| 晋江市| 林州市| 华阴市| 清远市| 北海市| 大渡口区| 天峨县| 宁德市| 涞源县| 建平县| 民乐县| 启东市| 杭锦旗| 台安县| 日土县| 桦川县| 尖扎县|