上一题下一题

消息队列中的毒消息为什么会形成重试风暴,重试次数、退避策略与死信转移如何共同定义终态?

进阶版
来源:jd高级工程师死信队列与终态转移消息队列毒消息重试策略
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

毒消息通常是指由于数据格式错误、业务状态不满足、依赖服务持续异常等原因,无论重试多少次都无法成功消费的消息。

它会形成重试风暴,主要是因为消费者处理失败后立即或短间隔重新投递,导致同一条消息被高频拉取、执行和失败。消息量较大时,消费者会反复消耗 CPU、线程、连接池和数据库资源,同时还可能阻塞后续正常消息,进一步造成消费延迟、积压和服务雪崩。如果失败原因是下游依赖异常,重试还会持续放大对下游系统的压力。

重试次数、退避策略和死信转移共同决定消息的终态:

重试次数 定义了消息允许被再次处理的上限。次数太少,可能把临时性故障过早判定为失败;次数太多,则会让毒消息长期占用消费资源。通常需要区分业务异常和系统异常,业务参数错误可以少重试甚至直接进入死信,网络抖动、服务暂时不可用则可以适当重试。 退避策略 决定两次重试之间的等待时间。立即重试最容易形成重试风暴,生产上一般使用固定间隔、指数退避或指数退避加随机抖动,例如 1 秒、2 秒、4 秒、8 秒逐步增加,并设置最大等待时间。随机抖动可以避免大量消息在同一时刻集中重试。 死信转移 定义超过重试上限后的最终处

登录后查看完整内容