死信交换机

发布时间 2023-09-14 18:46:49作者: 牧丶归

什么是死信?

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

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

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

如图,一个消息被消费者拒绝了,变成了死信:

 

因为simple.queue绑定了死信交换机 dl.direct,因此死信会投递给这个交换机:

 

 

如果这个死信交换机也绑定了一个队列,则消息最终会进入这个存放死信的队列:

 

另外,队列将死信投递给死信交换机时,必须知道两个信息:

死信交换机名称

死信交换机与死信队列绑定的RoutingKey

这样才能确保投递的消息能到达死信交换机,并且正确的路由到死信队列。