Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions 05-system-design/mq/RabbitMQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,33 @@ Spring Boot配置

spring.rabbitmq.password=admin

## 面试补充:RabbitMQ 可靠性治理

RabbitMQ 面试题建议按“交换机路由、消息确认、失败重试、死信隔离”来回答。

### 交换机选择

- Direct:按 routing key 精确匹配,适合点对点路由。
- Topic:按通配符匹配 routing key,适合按业务主题分发。
- Fanout:广播到绑定的所有队列,适合通知类场景。
- Headers:按消息头匹配,使用较少,规则更灵活但维护成本更高。

### 生产端可靠性

生产端要关注消息是否成功到达 Broker 和交换机。常见做法是开启 publisher confirm,发送失败时记录日志并重试;如果路由不到队列,还要配合 return callback 或 mandatory 参数发现不可路由消息。

### 消费端确认

消费端建议业务处理成功后再 ack。处理失败时可以 nack/reject,并决定是否重新入队。对于永久失败的消息,不应无限重试阻塞主队列,而应进入死信队列。

### 死信队列

死信队列用于隔离多次重试失败、过期、被拒绝或队列长度超限的消息。它的价值是保留问题现场,避免毒消息反复阻塞主链路,并支持人工修复后补偿重放。

### 重试策略

重试要区分临时错误和永久错误。网络抖动、下游短暂不可用可以延迟重试;参数错误、格式错误、业务状态非法应快速进入死信。所有消费逻辑都必须幂等,避免重试造成重复扣减、重复发券或重复通知。

---

<!-- note-nav:start -->
Expand Down