← 中文资源

简体中文版本

添加死信队列策略

限制重试次数,把毒消息连同上下文路由到死信队列,对深度和年龄告警,并记录安全的重新投递流程。

阅读英文原文

限制重试

毒消息不应永远阻塞队列。设置最大接收次数和死信目标,并在重试前给失败分类。超时或 503 之后可能成功;模式不匹配或授权失败不会。永久失败立即路由,瞬时失败走延迟重试。

让死信队列可观测

无人关注的死信队列是静默的数据丢失队列。对消息数量和最老消息年龄告警,并保留足够的诊断上下文:原始负载、错误类别、消费者版本和源位置。存储上下文前要脱敏。

{
  "original": { "topic": "orders", "partition": 3, "offset": 91822 },
  "error": "schema validation failed: missing customerId",
  "consumerVersion": "1.8.2",
  "attempts": 5
}

验证策略

预期结果:毒消息恰好被接收五次后进入死信队列,主队列继续处理新消息,死信队列在深度或年龄越界时告警。通过发布一条格式错误消息再发布一条合法消息来确认:合法消息被处理,错误消息带着源上下文被停放。只有消费者幂等且根因修复后才重放。

重放是一次发布

根因修复后再重放。确保消费者幂等,先重放到预发,并记录谁重放了什么。检查顺序要求和下游限流。让计数器翻倍或重复发送邮件的重放是新的故障,而不是恢复。