<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      RabbitMQ中Consumer的可靠性 - 指南

      在RabbitMQ中,消費者的可靠性主要指消息被正確消費且不丟失、不重復消費,核心是確保消息從隊列到消費者的整個處理過程可追溯、可確認。以下是保障消費者可靠性的關鍵機制和實踐:

      一、核心可靠性機制

      1. 消息確認機制(ACK)

      RabbitMQ默認不會自動刪除隊列中的消息,而是需要消費者顯式發送“確認”(ACK),才會將消息從隊列中移除。

      • 工作流程
        消費者接收消息后,處理完成→發送ACK→RabbitMQ刪除消息;若未發送ACK且消費者斷開連接,RabbitMQ會將消息重新投遞給其他消費者。
      • 配置方式
        在消費者代碼中關閉“自動確認”(autoAck=false),處理成功后手動發送ACK:
        // Java示例(Spring AMQP)
        @RabbitListener(queues = "queue1")
        public void handleMessage(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
        try {
        // 處理消息
        process(msg);
        // 手動確認(第二個參數false表示只確認當前消息)
        channel.basicAck(tag, false);
        } catch (Exception e) {
        // 處理失敗,拒絕消息并重新入隊(或丟棄)
        channel.basicNack(tag, false, true); // 第三個參數true表示重新入隊
        }
        }
      • 注意:若未手動確認且消費者崩潰,消息會被重新投遞,避免丟失;但需避免無限重試(可結合死信隊列處理)。
      2. 拒絕與重新投遞(Reject/Nack)

      當消息處理失敗時,消費者可主動拒絕消息,控制其是否重新入隊:

      • basicReject(tag, requeue):拒絕單條消息,requeue=true 則重新入隊,false 則丟棄(或進入死信隊列)。
      • basicNack(tag, multiple, requeue):批量拒絕消息,multiple=true 表示拒絕所有小于等于當前tag的消息。
      3. 死信隊列(Dead-Letter Queue, DLQ)

      用于處理無法正常消費的消息(如多次重試失敗、被拒絕且不重新入隊、過期消息),避免消息丟失或無限循環。

      • 配置方式
        在隊列聲明時指定死信交換機(x-dead-letter-exchange)和死信路由鍵(x-dead-letter-routing-key),失敗消息會被轉發到DLQ,后續可人工處理或定時重試。
      4. 消息持久化

      若隊列和消息本身已開啟持久化(生產者確保),即使RabbitMQ宕機,消息也不會丟失,消費者重啟后可繼續處理。

      • 依賴:隊列持久化(durable=true)+ 消息持久化(deliveryMode=2)。

      二、避免重復消費

      消息可能因網絡延遲、ACK丟失等原因被重復投遞,需在消費者端實現冪等性處理

      1. 唯一標識:為每條消息添加唯一ID(如UUID),消費者處理前檢查該ID是否已處理(可存在Redis、數據庫中)。
        // 偽代碼
        public void process(String msg) {
        String msgId = extractMsgId(msg);
        if (redis.exists(msgId)) {
        return; // 已處理,直接返回
        }
        // 處理消息
        doProcess(msg);
        redis.set(msgId, "processed", 24 * 3600); // 標記已處理
        }
      2. 業務冪等:通過業務邏輯保證重復處理結果一致(如數據庫唯一鍵約束、更新操作使用UPDATE ... WHERE條件)。

      三、其他優化實踐

      1. 限制消費者并發:通過prefetchCount控制消費者一次獲取的消息數量(避免消息堆積在消費者內存中,崩潰時丟失):
        // 每次只獲取1條消息,處理完再獲取下一條
        channel.basicQos(1);
      2. 消費者異常監控:結合監控工具(如Prometheus)跟蹤消費成功率、重試次數,及時發現處理瓶頸。
      3. 避免長任務:若消息處理耗時過長,可拆分任務或異步處理,避免ACK延遲導致消息被重新投遞。

      總結

      消費者可靠性的核心是:手動確認消息+處理失敗的兜底策略(死信隊列)+冪等性處理。通過這些機制,可確保消息“不丟、不重、正確處理”,適配分布式系統中的各種異常場景。

      posted on 2025-11-05 08:04  slgkaifa  閱讀(10)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 久久这里都是精品一区| 国产综合久久久久久鬼色| 潮州市| 亚洲精品一区国产欧美| 中文人妻av高清一区二区| 久久国产欧美日韩精品图片| 成年女性特黄午夜视频免费看| 日韩乱码人妻无码中文字幕视频| 黑人巨大精品欧美| 国产精品国三级国产av| 人妻少妇精品久久 | 保山市| 亚洲欧美牲交| 在国产线视频A在线视频| 国产在线线精品宅男网址| 久女女热精品视频在线观看| 欧美成人精品三级网站视频| 深夜av免费在线观看| 亚洲国产成人久久一区久久 | 日韩精品无码一区二区视频| 美女胸18下看禁止免费视频| 香蕉EEWW99国产精选免费| 久久精品国产99久久美女| 亚洲人成电影网站 久久影视| 野外做受又硬又粗又大视频√| 国产精品亚洲二区在线播放| 亚洲线精品一区二区三八戒| 国内精品免费久久久久电影院97| √天堂资源地址在线官网| 国产极品精品自在线不卡| 福利在线视频一区二区| 四虎永久在线精品无码视频| 国产欧美日韩精品a在线观看| 久久香蕉国产线看观看猫咪av| 汶川县| 中文国产不卡一区二区| 国产精品一区二区蜜臀av| 亚洲欧美色综合影院| 国产精品白浆在线观看免费 | 亚洲熟妇精品一区二区| 亚洲av永久无码天堂影院|