📚 分类
rabbitMq
🕵🏽‍♀️ 问题描述
rabbitMq中死信交换机?(RabbitMQ延迟队列有了解过嘛)
👨‍🏫 问题讲解
延迟队列: 进入队列的消息会被延迟消费的队列
场景: 超时订单、限时优惠、定时发布

❒ 死信交换机

✔ 当一个队列中的消息满足下列情况之一时,可以成为死信(dead letter)
✔ 消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false
✔ 消息是一个过期消息,超时无人消费
✔ 要投递的队列消息堆积满了,最早的消息可能成为死信

❒ TTL 
✔ TTL,也就是Time-To-Live。如果一个队列中的消息TTL结束仍未消费,则会变为死信,ttl超时分为两种情况
✔ 消息所在的队列设置了存活时间 (x-message-ttl=10000)
✔ 消息本身设置了存活时间 (ttl= 5000)

// 创建消息
Message message = MessageBuilder
.withBody("hello, ttl message".getBytes(standardcharsets.UTF-8))
.setExpiration("5000")
.build();
// 消息ID,需要封装到correlationData中
CorrelationData correlationData = new CorrelationData(UuID.randomuUID().tostring());
// 发送消息
rabbitTemplate.convertAndsend("ttl.direct","ttl", message, correlationData);

❒ 延迟队列插件
DelayExchange插件,需要安装在RabbitMQ中
RabbitMQ有一个官方的插件社区,地址为:https://www,rabbitmg.com/community=plugins.html


// 创建消息
Message message =M essageBuilder
.withBody("hello, delayed message".getBytes(standardcharsets.uTF_8))
.setHeader("x-delay",10000)
.build();
// 消息ID,需要封装到correlationData中
CorrelationData correlationData = new CorrelationData(uuID,randomuuID().tostring());
// 发送消息
rabbitTemplate,convertAndSend("delay.direct", "delay", message, correlationData);
🏳️‍🌈 问题总结
❒ RabbitMQ中死信交换机?(RabbitMQ延迟队列有了解过嘛)

✔ 我们当时一个什么业务使用到了延迟队列(节目定时发布)
✔ 其中延迟队列就用到了死信交换机和TTL(消息存活时间)实现的
✔ 消息超时未消费就会变成死信(死信的其他情况:拒绝被消费,队列满了)

❒ 延迟队列插件实现延迟队列DelayExchange

✔ 声明一个交换机,添加delayed属性为true
✔ 发送消息时,添加x-delay头,值为超时时间
📖 问题信息
📈 浏览次数:5 | 📅 更新时间:2025-12-01 22:01:49
📦 创建信息
🏷️ ID:70 | 📅 创建时间:2024-11-05 23:22:17