成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 前端
當消費者出現(xiàn)異常后,消息會不斷requeue(重新入隊)到隊列,再重新發(fā)送給消費者,然后再次異常,再次requeue,無限循環(huán),導致mq的消息處理飆升,帶來不必要的壓力。

一、失敗重試機制

    當消費者出現(xiàn)異常后,消息會不斷requeue(重新入隊)到隊列,再重新發(fā)送給消費者,然后再次異常,再次requeue,無限循環(huán),導致mq的消息處理飆升,帶來不必要的壓力。

    為此,可利用Spring的retry機制,在消費者出現(xiàn)異常時利用本地重試,而不是無限制的requeue到mq隊列。

配置參數(shù)如下:

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

測試結(jié)果:

圖片圖片

但是重試三次后,隊列里面的消息被踢出了:

圖片圖片

二、失敗消息處理策略

    在開啟重試模式后,重試次數(shù)耗盡,如果消息依然失敗,則需要有MessageRecoverer接口來處理,它包含三種不同的實現(xiàn):

     1、RejectAndDontRequeueRecoverer:重試耗盡后,直接reject,丟棄消息。默認就是這種方式。

    2、ImmediateRequeueMessageRecoverer:重試耗盡后,返回nack,消息重新入隊(不建議采用:會出現(xiàn)死循環(huán))。

     3、RepublishMessageRecoverer:重試耗盡后,將失敗消息投遞到指定的交換機。(推薦使用)

圖片圖片

三、實現(xiàn)方式

3.1、定義接收失敗消息的交換機、隊列及其綁定關(guān)系:

/**
     * 功能描述:定義接收錯誤消費的日志
     * @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("消費者收到發(fā)送錯誤的消息: " + message);
    }

3.2、定義RepublishMessageRecoverer:

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

3.3、測試結(jié)果:

圖片圖片

3.4、總結(jié)

消費者如何保證消息一定被消費?

  •     開啟消費者確認機制為auto,由spring確認消息處理成功后返回ack,異常時返回nack。如果一直處理異常會一直重試。
  •     開啟消費者失敗重試機制,并設(shè)置MessageRecoverer,多次重試失敗后將消息投遞到異常交換機,交由人工處理。
責任編輯:武曉燕 來源: 程序猿小楊
相關(guān)推薦

2024-09-25 08:32:05

2022-11-14 08:19:59

重試機制Kafka

2025-05-28 01:15:00

Golang重試機制

2022-05-06 07:44:10

微服務系統(tǒng)設(shè)計重試機制

2020-07-19 15:39:37

Python開發(fā)工具

2017-07-02 16:50:21

2025-02-26 10:49:14

2017-06-16 15:16:15

2021-02-20 10:02:22

Spring重試機制Java

2023-10-27 08:20:12

springboot微服務

2025-01-03 08:44:37

kafka消息發(fā)送策略

2023-11-06 08:00:38

接口高可用機制

2025-04-18 03:00:00

2024-01-04 18:01:55

高并發(fā)SpringBoot

2024-08-27 09:05:45

2025-02-27 09:35:22

2024-09-30 08:30:37

2023-11-17 11:55:54

Pythonretrying庫

2023-10-17 08:01:46

MQ消息重試

2025-02-26 08:10:40

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 青青久在线视频 | 亚洲精品在线免费 | 自拍视频网站 | 欧美日韩成人在线观看 | 黄色片视频网站 | 国产999精品久久久 日本视频一区二区三区 | 欧美一区二区三区小说 | www.99精品| 一区二区视频在线观看 | 国产一区二区三区四区三区四 | 欧美日韩综合精品 | 亚洲成人免费视频在线观看 | 老司机成人在线 | 小视频你懂得 | av中文在线 | 日本成年免费网站 | 日韩在线中文字幕 | 粉嫩国产精品一区二区在线观看 | 日韩视频三区 | 成人在线网 | 91在线免费观看网站 | www4虎 | 国产精品免费一区二区三区 | 亚洲一区二区三区高清 | se婷婷| 日韩欧美一区二区三区免费看 | 国产一区 | 国产日韩一区二区 | 成人一级视频在线观看 | 久久久91| 97久久国产| 亚洲精品视频在线 | 国产伦精品一区二区三毛 | 老司机67194精品线观看 | 日韩在线观看视频一区 | 全部免费毛片在线播放网站 | 国产精品久久久久久一区二区三区 | aaaaaaa片毛片免费观看 | 国产日韩在线观看一区 | 欧美三级成人理伦 | 亚洲色欲色欲www |