什么是死信交换机?
当一个队列中的消息满足下来情形之一时,可以称为死信(dead letter):
- 消费者使用basic.reject或basic.nack声明消费失败,并且消息的requeue参数设置为false
- 消息是一个过期消息,超时无人消费
- 要投递的队列消息堆积满了,最早的消息可能称为死信
如果该队列配置了dead-letter-exchange属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机就称为 死信交换机(Dead Letter Exchange,检查DLX)。
什么是TTL?
就是Time-To-Live。如果一个队列中的消息TTL结束仍未消费,则会变为死信,ttl超时分为两种情况:
- 消息所在的队列设置了存活时间
- 消息本身设置了存活时间
延迟队列 = 死信交换机 + TTL。
消息超时未消费就会变成死信(死信的其他情况:拒绝被消费,队列满了)。
延迟队列插件实现延迟队列DelayExchange
- 声明一个交换机,添加delayed属性为TRUE
- 发送消息时,添加x-delay头,值为超时时间