面试官:RabbitMQ本身不支持延迟队列,那你给我实
现一个?
消息在队列满足达到一定的条件,会被认为是死信消息(dead-
lettered),这时候,RabbitMQ会重新把这类消息发到另外一个的exc
hange,这个exchange称为Dead Letter Exchanges.
以下任一条件满足,即可认为是死信:
消息被拒绝消费(basic.reject or basic.nack)并且设置了requeue=fasle
消息的TTL到了(消息过期)
达到了队列的长度限制
需要注意的是,Dead letter exchanges (DLXs)
其实就是普通的exchange,可以和正常的exchange一样的声明或者使
用。
死信消息路由
队列中可以设置两个属性:
x-dead-letter-exchange
x-dead-letter-routing-key
当这个队列里面的消息成为死信之后,就会投递到x-dead-letter-
exchange指定的exchange中,其中带着的routing
key就是中指定的值x-dead-letter-routing-key。
而如果使用默认的exchange(routing
key就是希望指定的队列),则只需要把x-dead-letter-
exchange设置为空(不能不设置),类似下面