之所以将两者放在一起比较,是因为两者都由一个共同的特点:当消息不能被正常消费或投递时的容错机制。
备份交换器:未能正常路由的消息,又不希望因为添加mandatory参数提高编码的复杂性,此时即可使用备份交换器,在声明交换器时传入alternate-exchange参数,需要注意的是,发送到备份交换器的消息路由键与从生产者发送时的一致,所以如果备份交换器的类型不是fanout,就会存在消息丢失的可能。
死信队列:也称死信交换器,消息一般成为死信有以下三种可能:
- 消息被拒绝(Basic.Reject或Basic.Nack,并且requeue参数为false)
- 消息过期
- 队列达到最大长度
声明队列时传入参数x-dead-letter-exchange来添加死信交换器,默认死信交换器使用原队列的路由键,可以为其设置新的路由键。