标准答案
- 连接抖动、短暂限流和依赖切换等暂时错误可以有限次立即或延迟重试,并使用退避和随机抖动。
- 参数非法、权限不足、资源不存在等确定性错误不应反复重试,应记录原因并进入死信或人工处理。
- 死信队列用于隔离持续失败消息,必须有告警、查看、修复后重放和防止再次无限循环的机制。
- 人工补偿要有审批、幂等、审计和结果校验,不能让运维直接修改业务表掩盖失败。
题目解析
立即重试适合极短的连接抖动,延迟重试适合等待依赖恢复,死信适合隔离持续失败,人工补偿适合高风险或不可逆副作用。选择依据是错误是否暂时、是否幂等和是否能自动恢复。
每次重试都会消耗同一条调用链的 deadline 和下游容量,必须设置次数、退避、抖动和放大监控。错误日志和重试队列不能把一个故障变成新的资源耗尽。
死信不是终点。处理人员需要看到原始载荷、版本、失败原因和业务 ID,修复代码或数据后小批量重放,并在重放前验证幂等和结果对账。
常见误区
- 误区:对所有异常统一重试。改正:把暂时错误、确定性错误和高风险副作用分开处理。
- 误区:死信队列只进不出。改正:提供查看、修复、审批、小批量重放和最终状态记录。
- 误区:重放前不修复根因和验证幂等。改正:先确认失败条件已消除,再用低风险样本验证结果和副作用。