296 字
1 分钟
RabbitMQ 无法路由的消息:备份交换机、Return 与死信
RabbitMQ 中消息到达交换机后,如果没有匹配的队列绑定,默认会被丢弃。生产环境需要明确处理这类路由失败。
三种处理机制
- 备份交换机(Alternate Exchange):主交换机无法路由时转发到备份交换机,再由它的绑定关系把消息送到专门队列。
- mandatory + Return Listener:生产者把消息标记为
mandatory=true,路由失败时 RabbitMQ 将消息退回,生产者可以重发、记录日志或报警。 - 死信队列:严格来说,死信处理的是已经进入队列后被拒绝、过期或溢出的消息,不是交换机路由失败;它可以作为消费失败的兜底。
死信的三种触发场景
- 消费者拒绝消息,并设置
requeue=false。 - 消息 TTL 到期仍未被消费。
- 队列达到最大长度,新消息挤出旧消息。
| 机制 | 触发位置 | 适用场景 |
|---|---|---|
| 备份交换机 | 交换机路由阶段 | 收集未路由消息 |
| Return Listener | 交换机路由阶段 | 生产者实时感知失败 |
| 死信队列 | 消息进入队列之后 | 重试、监控或人工介入 |
RabbitMQ 无法路由的消息:备份交换机、Return 与死信
https://blog.xqcherry.top/posts/interview/message-queues/rabbitmq-unroutable-messages/ 目录