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

微服務: 05-rabbitmq設置重試次數(shù)并設置死信隊列

這篇具有很好參考價值的文章主要介紹了微服務: 05-rabbitmq設置重試次數(shù)并設置死信隊列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1. 上文傳送門:?

2. 前言簡介:?

2.1 問: 消費端重復循環(huán)異常如何解決?

2.2 為什么要使用死信隊列

2.3 案例思路

-> ps: 以下案例經(jīng)過測試(思路一/二實現(xiàn)原理一樣)

-> 2.3.1 思路一?

-> 2.3.2 思路二

3. 案例代碼

3.1 簡單介紹案例

3.2 聲明交換機 隊列 以及綁定路由鍵

3.3 修改配置文件

3.4 發(fā)送消息

?3.5 接收消息(自動確認)

3.6 開啟測試代碼

3.7 測試結(jié)果

---> 3.7.1 查看交換機

?---> 3.7.2 查看隊列?編輯

?---> 3.7.3 主要查看方向

---> 3.7.4 另外遇到問題 別慌


1. 上文傳送門:?

微服務: 00-rabbitmq出現(xiàn)的異常以及解決方案

微服務: 01-rabbitmq的應用場景及安裝(docker)

微服務: 02-rabbitmq在springboot中如何使用(上篇)

微服務: 03-rabbitmq在springboot中如何使用(下篇)

微服務: 04-springboot中rabbitmq配置,消息回收,序列化方式

2. 前言簡介:?

上面文章是安裝, 基礎測試案例, 下面是進階的第一篇文章

本篇主要介紹自動確認進入死信隊列
手動確認在下一篇介紹

2.1 問: 消費端重復循環(huán)異常如何解決?

使用 RabbitMQ 的重試機制,當消費者處理消息失敗時,可以將消息重新放回隊列中,并設置一定的重試次數(shù)和重試時間間隔。如果超過了重試次數(shù)仍然處理失敗,則可以將消息放入死信隊列中,方便后續(xù)處理

2.2 為什么要使用死信隊列

無法被消費的消息, 這樣的消息如果沒有后續(xù)的處理,就會一直在正常隊列里重復重試, 所以加入私信隊列后 進行人工補償, 也可以分等級 哪些重要消息需要優(yōu)先處理

2.3 案例思路

-> ps: 以下案例經(jīng)過測試(思路一/二實現(xiàn)原理一樣)

-> 2.3.1 思路一?

?兩個交換機(一個正常exchange 一個死信exchange)

?兩個隊列(正常queue,死信queue) 一個隊列一個路由鍵

?正常交換機綁定正常queue 綁定路由鍵?同理

-> 2.3.2 思路二

一個交換機? 兩個不同路由鍵 然后綁定(本文使用)


3. 案例代碼

3.1 簡單介紹案例

服務A發(fā)起請求到 rabbitmq,? 服務B監(jiān)聽并處理消息, 報錯了, 重試了五次還不行后 , 進入死信隊列

3.2 聲明交換機 隊列 以及綁定路由鍵

    @Bean
    public DirectExchange pzyExchange() {
//        return new DirectExchange("pzy_exchange", true, false);
        return ExchangeBuilder.directExchange("pzy_exchange").build();
    }

    @Bean
    public Queue deadLetterQueue() {
        return QueueBuilder.durable("order_dead_queue").build();
    }

    @Bean
    public Binding deadBinding(Queue deadLetterQueue, DirectExchange pzyExchange) {
        return BindingBuilder.bind(deadLetterQueue).to(pzyExchange).with("orderDeadRoutingKey");
    }

    @Bean
    public Binding normalBinding(Queue normalLetterQueue, DirectExchange pzyExchange) {
        return BindingBuilder.bind(normalLetterQueue).to(pzyExchange).with("orderNormalRoutingKey");
    }

    @Bean
    public Queue normalLetterQueue() {
        Map<String, Object> arguments = new HashMap<>(3);
        arguments.put("x-dead-letter-exchange", "pzy_exchange");
        arguments.put("x-dead-letter-routing-key", "orderDeadRoutingKey");
        arguments.put("x-max-length", 200);

        return QueueBuilder.durable("order_normal_queue").withArguments(arguments).build();
    }

3.3 修改配置文件

微服務: 04-springboot中rabbitmq配置,消息回收,序列化方式

3.4 發(fā)送消息

rabbitTemplate.convertAndSend("pzy_exchange", "orderNormalRoutingKey", "我是消息");

?3.5 接收消息(自動確認)

自動確認, 在重試結(jié)束后, 自動進入死信隊列

(手動確認的下文在介紹)

@RabbitListener(queues = "#{normalLetterQueue.name}")
    public void oldHoldInNewPurchaseData(Message message, String message1, Channel channel) throws IOException {

        log.info("獲取到mq消息,消息內(nèi)容為{}", message);


        log.info("mq接收到的對象===>{}", aixiPurchaseRequestDTO);
//        System.out.println(map);

        try {

//            int i = new Random().nextInt(5);

//            if (i > 1) throw new OrderServiceException(ResponseEnum.E40008, "后端測試報錯回收機制!");//60% 概率報錯
//            if (true) throw new OrderServiceException(ResponseEnum.E40008, "后端測試報錯回收機制!");//100% 報錯
           

//            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);

        } catch (Exception e) {
            e.printStackTrace();

            log.error("異常===> {}", e.getMessage());

            throw new OrderServiceException(ResponseEnum.E40008, e.getMessage());
        } finally {
//            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
        }


    }

3.6 開啟測試代碼

第一個判斷(60%): 是查看是否在第一次報錯后續(xù)消費成功后 是否進入死信隊列

第二個判斷(100%): 是測試重試機制(次數(shù))過后 是否進入死信隊列

拋出 throw new RuntimeException("測試報錯!") 就可以

int i = new Random().nextInt(5);
if (i > 1) throw new OrderServiceException(ResponseEnum.E40008, "后端測試報錯回收機制!");//五分之三概率報錯
//if (true) throw new OrderServiceException(ResponseEnum.E40008, "后端測試報錯回收機制!");//五分之三概率報錯

3.7 測試結(jié)果

---> 3.7.1 查看交換機

有沒有綁定兩個路由鍵(沒有查看綁定配置)

微服務: 05-rabbitmq設置重試次數(shù)并設置死信隊列,# 分布式必備服務配置,微服務,rabbitmq,java,spring cloud,spring boot

?---> 3.7.2 查看隊列微服務: 05-rabbitmq設置重試次數(shù)并設置死信隊列,# 分布式必備服務配置,微服務,rabbitmq,java,spring cloud,spring boot

?---> 3.7.3 主要查看方向

查看是不是最后一次報錯后 才進入死信隊列

報錯異常是不是無限制循環(huán)報錯

---> 3.7.4 另外遇到問題 別慌

先把交換機和隊列都刪了 然后再重試

[如果生產(chǎn)者和消費者配置是獨立的 看看隊列聲明時是否相同, 不同刪了隊列重啟項目]


?文章來源地址http://www.zghlxwxcb.cn/news/detail-583041.html

到了這里,關于微服務: 05-rabbitmq設置重試次數(shù)并設置死信隊列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 【RabbitMQ】RabbitMQ高級:死信隊列和延遲隊列

    【RabbitMQ】RabbitMQ高級:死信隊列和延遲隊列

    在電商平臺下單,訂單創(chuàng)建成功,等待支付,一般會給30分鐘的時間,開始倒計時。如果在這段時間內(nèi)用戶沒有支付,則默認訂單取消。 該如何實現(xiàn)? 定期輪詢(數(shù)據(jù)庫等) 用戶下單成功,將訂單信息放入數(shù)據(jù)庫,同時將支付狀態(tài)放入數(shù)據(jù)庫,用戶付款更改數(shù)據(jù)庫狀態(tài)。定

    2024年01月17日
    瀏覽(19)
  • RabbitMQ - 死信隊列,延時隊列

    RabbitMQ - 死信隊列,延時隊列

    死信隊列: DLX 全稱(Dead-Letter-Exchange),稱之為死信交換器,當消息變成一個死信之后,如果這個消息所在的隊列存在 x-dead-letter-exchange 參數(shù),那么它會被發(fā)送到x-dead-letter-exchange對應值的交換器上,這個交換器就稱之為死信交換器,與這個死信交換器綁定的隊列就是死信隊列

    2024年02月09日
    瀏覽(25)
  • RabbitMQ-死信交換機和死信隊列

    RabbitMQ-死信交換機和死信隊列

    DLX: Dead-Letter-Exchange 死信交換器,死信郵箱 當消息成為Dead message后,可以被重新發(fā)送到另一個交換機,這個交換機就是DLX。 如下圖所示: 其實死信隊列就是一個普通的交換機,有些隊列的消息成為死信后,(比如過期了或者隊列滿了)這些死信一般情況下是會被 RabbitMQ 清理

    2024年02月08日
    瀏覽(27)
  • RabbitMQ延遲隊列,死信隊列配置

    延遲和死信隊列的配置 延遲隊列有效期一分鐘,后進入死信隊列,如果異常就進入異常隊列 異常隊列配置類

    2024年02月14日
    瀏覽(28)
  • 什么是mq?可靠性、重復消息、重復消費、丟失、發(fā)送大文件、延遲、發(fā)送機制、重試、死信、冪等、有序、大小、過期、優(yōu)先級、進了死信隊列還能出來嗎?

    “MQ” 指的是消息隊列(Message Queue),是一種用于異步通信的技術。消息隊列是一種中間件,用于在分布式系統(tǒng)中傳遞消息,使不同組件之間能夠進行松散耦合的通信。它的核心思想是生產(chǎn)者將消息發(fā)送到隊列,而消費者從隊列中接收并處理消息。 消息隊列的主要優(yōu)點包括

    2024年02月06日
    瀏覽(16)
  • Rabbitmq死信隊列及延時隊列實現(xiàn)

    問題:什么是延遲隊列 我們常說的延遲隊列是指消息進入隊列后不會被立即消費,只有達到指定時間后才能被消費。 但RabbitMq中并 沒有提供延遲隊列功能 。那么RabbitMQ如何實現(xiàn)延遲隊列 通過:死信隊列 + RabbitMQ的TTL特性實現(xiàn)。 實現(xiàn)原理 給一個普通帶有過期功能的隊列綁定一

    2024年02月15日
    瀏覽(20)
  • 【RabbitMQ筆記10】消息隊列RabbitMQ之死信隊列的介紹

    【RabbitMQ筆記10】消息隊列RabbitMQ之死信隊列的介紹

    這篇文章,主要介紹消息隊列RabbitMQ之死信隊列。 目錄 一、RabbitMQ死信隊列 1.1、什么是死信隊列 1.2、設置過期時間TTL 1.3、配置死信交換機和死信隊列(代碼配置) (1)設置隊列過期時間 (2)設置單條消息過期時間 (3)隊列設置死信交換機 (4)配置的基本思路 1.4、配置

    2024年02月16日
    瀏覽(95)
  • 【RabbitMQ學習日記】——死信隊列與延遲隊列

    【RabbitMQ學習日記】——死信隊列與延遲隊列

    死信,顧名思義就是無法被消費的消息,字面意思可以這樣理解,一般來說, producer 將消息投遞到 broker 或者直接到 queue 里了, consumer 從 queue 取出消息進行消費,但某些時候 由于特定的原因?qū)е?queue 中的某些消息無法被消費 ,這樣的消息如果沒有后續(xù)的處理,就變成了死

    2024年02月06日
    瀏覽(22)
  • 【RabbitMQ教程】第五章 —— RabbitMQ - 死信隊列

    【RabbitMQ教程】第五章 —— RabbitMQ - 死信隊列

    ?????????????????????????????????????????????????????????????????? ?? 【 R a b b i t M Q 教 程 】 第 五 章 — — R a b b i t M Q ? 死 信 隊 列 color{#FF1493}{【RabbitMQ教程】第五章 —— RabbitMQ - 死信隊列} 【 R a b b i t M Q 教 程 】 第 五 章 — — R a

    2024年02月09日
    瀏覽(19)
  • RabbitMQ 死信隊列實現(xiàn)

    RabbitMQ 死信隊列實現(xiàn)

    死信隊列使用注解實現(xiàn) 報錯: 可以使用注解的方式來綁定 死信隊列,但是還是會報上面的錯誤,繼續(xù)修改 參數(shù)試試 java - How to set x-dead-letter-exchange in Rabbit? - Stack Overflow 但是使用注解綁定的話好像又不生效了,問題原因,tmd將死信參數(shù)綁到交換機上了,c 修改代碼 ?至于問題

    2024年02月02日
    瀏覽(16)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包