延迟队列
延迟队列:进入队列的消息会被延迟消费的队列。
延迟队列=死信交换机 + TTL(过期时间)
延迟队列的使用场景:超时订单、限时优惠、定时发布
死信交换机
当一个队列中的消息满足下列情况之一时,可以成为死信(dead letter):
- 消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false
- 队列中的消息是一个过期消息,超时未消费
- 要投递的队列消息堆积满了,最早的消息可能成为死信
如果该队列配置了dead-letter-exchange属性 去 指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个接收死信的交换机称为死信交换机(Dead Letter Exchange,简称DLX),最后把死信交换机当成正常的交换机用就可以了。
TTL
TTL,也就是Time-To-Live。如果一个队列中的消息TTL结束仍未消费,则会变为死信,ttl超时分为两种情况:
- 消息所在的队列设置了存活时间
- 消息本身设置了存活时间
- 当以上两个都设置了,则哪个的TTL短就用哪个
延迟队列插件
安装这个插件,实现延迟队列就很容易:
在声明交换机的时候,添加delayed = "true",然后它就是可以实现延迟队列的交换机了:
发消息的时候设置消息的TTL: