RabbitMQ死信队列、延时队列

  1. 消息被消费⽅否定确认,使⽤channel.basicNack 或 channel.basicReject ,并且此时 requeue 属性被设置为 false 。

  2. 消息在队列的存活时间超过设置的TTL时间。

  3. 消息队列的消息数量已经超过最⼤队列⻓度。

那么该消息将成为“死信”。“死信” 消息会被RabbitMQ进⾏特殊处理,如果配置了死信队列信息,那么 该消息将会被丢进死信队列中,如果没有配置,则该消息将会被丢弃

为每个需要使⽤死信的业务队列配置⼀个死信交换机,这⾥同⼀个项目的死信交换机可以共⽤⼀个,然后为每个业务队列分配⼀个单独的路由key,死信队列只不过是绑定在死信交换机上的队列,死信交换 机也不是什么特殊的交换机,只不过是⽤来接受死信的交换机,所以可以为任何类型【Direct、 Fanout、Topic】

TTL:⼀条消息或者该队列中的所有消息的最⼤存活时间

如果⼀条消息设置了TTL属性或者进⼊了设置TTL属性的队列,那么这条消息如果在TTL设置的时间内 没有被消费,则会成为“死信”。如果同时配置了队列的TTL和消息的TTL,那么较⼩的那个值将会被使

⽤。

只需要消费者⼀直消费死信队列里的消息


⚡ RabbitMQ 死信队列与延时队列终极指南

结合原理、配置、代码示例和生产实践,深入解析如何利用RabbitMQ实现消息异常处理和定时任务调度。


1. 💀 死信队列(Dead Letter Queue, DLX)

▎ 核心机制
当消息满足以下条件时,会进入死信队列:

  1. 消费者basic.rejectbasic.nackrequeue=false

  2. 消息TTL过期

  3. 队列达到最大长度

▎ 配置步骤

▎ 代码实现(Java)

// 1. 声明死信交换器和队列
channel.exchangeDeclare("dlx", "direct");
channel.queueDeclare("dlq", true, false, false, null);
channel.queueBind("dlq", "dlx", "dead");

// 2. 普通队列绑定死信规则
Map<String, Object> a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EthanMilk

你的鼓励是我创作的最大动力谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值