标准答案
- Producer 通常把消息发给 Exchange,Exchange 按 direct、topic、fanout 等规则和 Routing Key 将消息投递到绑定的 Queue。
- Queue 是消费者实际获取消息的缓冲和顺序边界;多个消费者可以竞争消费同一队列。
- Ack 表示消息已被处理或明确拒绝;未确认消息在连接断开时可能重新投递。
- Prefetch 限制单个消费者同时持有的未确认消息数,用于平衡吞吐、内存和公平性。
题目解析
Exchange 决定消息如何路由,Queue 承载待处理消息,Ack 表示消费者对投递结果的确认,Prefetch 控制未确认在途量。每层都可能配置正确,但业务仍可能在处理或外部写入阶段失败。
未确认消息在连接断开后可能重新投递,确认时机决定丢失和重复边界。消费者应先完成可恢复的业务处理,再确认,并为重复消息保留幂等保护。
Prefetch 需要在吞吐、公平性、内存和失败重投之间取舍。过大可能让一个消费者囤积大量未确认消息,过小则增加调度往返和吞吐损失。
常见误区
- 误区:把 Exchange 当作消息永久存储。改正:确认 Queue、持久化、保留和备份策略,Exchange 主要负责路由。
- 误区:处理失败也确认消息。改正:按错误类型重试、拒绝或进入死信,并保留业务失败证据。
- 误区:Prefetch 越大越快。改正:按单条处理时间、内存、消费者数量和失败重投成本压测设置。