死信队列:
死信队列是专门存放那些死信消息的,也就是我们配置死信队列可以将那些将会被丢弃的死信消息放入队列中。
死信消息:
1. 消息被消费方否认确认的,消费者使用 channel.basicNack 或 channel.basicReject 返回给队列的,并且此时 requeue(重新发送)属性被设置为 false。(默认为 true)
2. 消息在队列的存活时间超过设置的 TTL 时间。
3. 消息队列的消息数量已经超过最大队列长度。(队列会将老的数据排出去)
死信队列是绑定在死信交换机上的队列,死信交换机也不是什么特殊的交换机,只不过是用来接受死信的交换机,所以可以为任何类型【Direct、Fanout、Topic】
延迟队列:
TTL:一条消息或者该队列中的而所有消息的最大存活时间
如果一条消息设置了 TTL 属性或进入了设置 TTL 属性的队列,那么这条消息如果在 TTL 设置的时间内没有被消费,则会称为 “死信”。如果同时配置了队列的 TTL 和消息的 TTL,那么较小的那个值将会被使用。