Dead Letter Exchange,简称 DLX。
它的心智不是:
消息死了,随便丢个垃圾桶更准确的理解是:
原本不能继续按正常路径处理的包裹,被重新投递到另一条异常处理通道。
在 RabbitMQ 里,常见会触发死信的情况有:
- 消费者
reject/nack,并且requeue=False - 消息 TTL 到期
- 队列长度超限导致消息被丢弃
- quorum queue 超过投递限制
所以死信队列非常适合做:
- 人工排查
- 失败审计
- 补偿任务
- 告警触发
- 离线修复
城市类比就是:
正常派送货架处理不了
-> 转入异常件中心
-> 由人工专员或特殊流程接手一个最小示例:
channel.queue_declare(
queue="order.main.q",
durable=True,
arguments={
"x-dead-letter-exchange": "order.dlx",
"x-dead-letter-routing-key": "order.dead",
},
)这表示:
order.main.q上处理失败、过期、溢出的异常件,可以被改投到order.dlx。