RabbitMQ UI(控制台)配置死信队列

官方关于死信队列的介绍 

Dead Letter Exchanges | RabbitMQicon-default.png?t=N7T8https://www.rabbitmq.com/docs/dlx

前言:

在RabbitMQ中,如果在声明队列时不指定TTL(Time-To-Live,存活时间),但在发布消息时指定了TTL,则会使用消息的TTL。当消息过期时,它不会自动进入死信(Dead Letter)队列,除非你专门设置了死信交换器(Dead Letter Exchange,DLX)。

为了让过期的消息进入死信队列,你需要做以下几步:

  1. 声明一个死信交换机(my-dlx)

  2. 声明一个死信队列(dead-queue),并在声明完成后,绑定死信交换机(my-dlx)和死信routing-key(比如我定义叫dlx.ttl.key)

  3. 声明一个普通队列(normal-queue),声明时要指定两个参数

    1. x-dead-letter-exchange:指定你刚刚声明的死信交换机(my-dlx)

    2. x-dead-letter-routing-key:指定你刚刚自定义的routing-key(dlx.ttl.key)

  4. 发送消息的时候,设置消息的TTL。

看图说话

1. 声明一个死信交换机,如下图

 

2. 声明一个死信队列,如下图

 

 3. 声明一个普通队列,并设置参数(x-dead-letter-exchange,x-dead-letter-routing-key),如下图

 4. 为死信队列绑定绑定死信交换机(mgcc-dlx)和死信routing-key(比如我定义叫dlx.ttl.key)

贴一段发消息的代码

 /**
     * 发送带TTL的数据至优先级队列
     *
     * @param routingKey 队列名称
     * @param message    消息
     * @param priority   优先级 1-10
     */
    public void mgccSendTtlPriorityQueue(String routingKey, Object message, int priority, String expiration) {
        log.info("发送消息【{}】至优先级队列【{}】,优先级为:{},有效期为:{}", 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)发消息,消息正常进入,显示待消费数量:1

 2. 普通队列(mgcc_test)消息过期后,消息流入死信队列(test_dead),显示待消费数量:1

 

大功告成! 

吐槽一下

CSDN的编辑真是越来越难用了,这些图片贴的歪歪扭扭,对于强迫症来说是真难受啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值