Skeyevss FAQ:死信队列与补偿作业
1. 什么是死信(DLQ)
消息在 最大重试次数 后仍失败,进入 死信队列 或 失败表,避免无限循环占用资源。适用于:Webhook 投递、录像后处理、索引构建、外部 API 同步。
2. 必须有运维出口
DLQ 不是垃圾桶,需要:
- 可视化查询(按时间、类型、租户);
- 人工重放 与 批量丢弃;
- 告警:DLQ 深度超阈。
3. 根因分类
- 对端不可用:应 暂停重试 或 熔断;
- 数据 poison pill:某条消息 必失败,需 跳过或修复数据;
- 代码 bug:重放前需 发补丁,否则 DLQ 无限堆积。
4. 补偿作业(Reconciliation)
定期任务对比 「应为状态」与「实际状态」:
- DB 中 录像条目 与 文件是否存在;
- 设备在线标志 与 最近心跳;
- 外部系统订单 与 本地记录。
补偿要能 幂等,避免 重复写。
5. 与消息堆积的关系
DLQ 增长过快可能是 下游大面积故障;需区分 暂时性 与 结构性。《消息堆积与异步任务降级》FAQ 中的降级策略应 联动 DLQ 告警。
死信是 系统的体检报告;没有 DLQ 的消息系统往往把失败 伪装成成功或静默丢失。