小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

RabbitMQ UI(控制臺)配置死信隊列

 修行的嘟嘟 2024-08-15 發(fā)布于北京

前言:

在RabbitMQ中,如果在聲明隊列時不指定TTL(Time-To-Live,存活時間),但在發(fā)布消息時指定了TTL,則會使用消息的TTL。當(dāng)消息過期時,它不會自動進(jìn)入死信(Dead Letter)隊列,除非你專門設(shè)置了死信交換器(Dead Letter Exchange,DLX)。

為了讓過期的消息進(jìn)入死信隊列,你需要做以下幾步:

聲明一個死信交換機(jī)(my-dlx)

聲明一個死信隊列(dead-queue),并在聲明完成后,綁定死信交換機(jī)(my-dlx)和死信routing-key(比如我定義叫dlx.ttl.key)

聲明一個普通隊列(normal-queue),聲明時要指定兩個參數(shù)

x-dead-letter-exchange:指定你剛剛聲明的死信交換機(jī)(my-dlx)

x-dead-letter-routing-key:指定你剛剛自定義的routing-key(dlx.ttl.key)

發(fā)送消息的時候,設(shè)置消息的TTL。

看圖說話

1. 聲明一個死信交換機(jī),如下圖

2. 聲明一個死信隊列,如下圖

 3. 聲明一個普通隊列,并設(shè)置參數(shù)(x-dead-letter-exchange,x-dead-letter-routing-key),如下圖

 4. 為死信隊列綁定綁定死信交換機(jī)(mgcc-dlx)和死信routing-key(比如我定義叫dlx.ttl.key)

貼一段發(fā)消息的代碼

 /**

     * 發(fā)送帶TTL的數(shù)據(jù)至優(yōu)先級隊列

     *

     * @param routingKey 隊列名稱

     * @param message    消息

     * @param priority   優(yōu)先級 1-10

     */

    public void mgccSendTtlPriorityQueue(String routingKey, Object message, int priority, String expiration) {

        log.info("發(fā)送消息【{}】至優(yōu)先級隊列【{}】,優(yōu)先級為:{},有效期為:{}", message, routingKey, priority, expiration);

        mgccRabbitTemplate.convertAndSend(routingKey, message, messageProperties -> {

            messageProperties.getMessageProperties().setPriority(priority);

            messageProperties.getMessageProperties().setExpiration(expiration);

            return messageProperties;

        });

    }

@Test

public void test() {

   Long millisecondDiff = 5000L;

   producerService.mgccSendTtlPriorityQueue("mgcc_test", "asd",

                1, millisecondDiff.toString());

}

看看效果

1. 向普通隊列(mgcc_test)發(fā)消息,消息正常進(jìn)入,顯示待消費(fèi)數(shù)量:1

 2. 普通隊列(mgcc_test)消息過期后,消息流入死信隊列(test_dead),顯示待消費(fèi)數(shù)量:1

大功告成! 

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多