RabbitMQ的死信队列(延时队列)

xiaojiuaigc@163.com 发布于 2024-11-11 593 次阅读


  • 延迟队列:进入队列的消息会被延迟消费的队列
  • 场景:超时订单、限时优惠、定时发布

延迟队列=死信交换机+TTL(生存时间)

当一个队列中的消息满足下列情况之一时,可以成为死信(dead letter):

  • 消费者使用reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false
  • 消息是一个过期消息,超时无人消费
  • 要投递的队列消息堆积满了,最早的消息可能成为死信

如果该队列配置了dead-letter-exchange属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为死信交换机(Dead Letter Exchange,简称DLX)。

TTL,也就是Time-To-Live。如果一个队列中的消息TTL结束仍未消费,则会变为死信,ttl超时分为两种情况:

  • 消息所在的队列设置了存活时间
  • 消息本身设置了存活时间

 

我们当时一个超时邀请业务使用到了延迟队列(超时订单、限时优惠、定时发布…)

其中延迟队列就用到了死信交换机和TTL(消息存活时间)实现的

消息超时未消费就会变成死信(死信的其他情况:拒绝被消费,队列满了)