知识卡片

死信队列与延迟队列共用同一套机制

专业/工作 · 592.b

内容

一条消息在被拒绝且不重新入队([[拒绝消息后的两种走向]])、或过期、或所在队列达到最大长度时会变成”死信”;如果队列配置了死信交换器(DLX),死信会被重新投递到DLX,再路由到绑定的死信队列。AMQP协议本身不提供延迟队列功能,但把DLX和TTL([[队列级与消息级TTL为何清理策略不同]])组合起来就能模拟出延迟效果:消息先进入一个设置了固定过期时间的普通队列,真正的消费者订阅的其实是与之关联的死信队列,消息在原队列里”计时等待”,到期后自动转入死信队列被消费。发散:这展示了一种常见的设计经济性——不必为”延迟投递”这个新需求发明新机制,把两个已有机制(过期清除+失败转发)串联起来就能拼出新能力。

参考来源

《RabbitMQ实战指南》第4章《RabbitMQ进阶》