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

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

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

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

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

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

    队列将死信投递给死信交换机时,必须知道两个信息,才能确保投递的消息能到达死信交换机,并且正确地路由到死信队列

    • 死信交换机的名称
    • 死信交换机与死信队列绑定的路由key :::