296 字
1 分钟
RabbitMQ 无法路由的消息:备份交换机、Return 与死信

RabbitMQ 中消息到达交换机后,如果没有匹配的队列绑定,默认会被丢弃。生产环境需要明确处理这类路由失败。

三种处理机制#

  1. 备份交换机(Alternate Exchange):主交换机无法路由时转发到备份交换机,再由它的绑定关系把消息送到专门队列。
  2. mandatory + Return Listener:生产者把消息标记为 mandatory=true,路由失败时 RabbitMQ 将消息退回,生产者可以重发、记录日志或报警。
  3. 死信队列:严格来说,死信处理的是已经进入队列后被拒绝、过期或溢出的消息,不是交换机路由失败;它可以作为消费失败的兜底。

死信的三种触发场景#

  • 消费者拒绝消息,并设置 requeue=false。
  • 消息 TTL 到期仍未被消费。
  • 队列达到最大长度,新消息挤出旧消息。
机制触发位置适用场景
备份交换机交换机路由阶段收集未路由消息
Return Listener交换机路由阶段生产者实时感知失败
死信队列消息进入队列之后重试、监控或人工介入
RabbitMQ 无法路由的消息:备份交换机、Return 与死信
https://blog.xqcherry.top/posts/interview/message-queues/rabbitmq-unroutable-messages/
作者
xqcherry
发布于
2026-09-24
许可协议
CC BY-NC-SA 4.0