死信队列与补偿作业

12 阅读1分钟

Skeyevss FAQ:死信队列与补偿作业

试用安装包下载 | SMS | 在线演示

项目地址:github.com/openskeye/g…


1. 什么是死信(DLQ)

消息在 最大重试次数 后仍失败,进入 死信队列 或 失败表,避免无限循环占用资源。适用于:Webhook 投递、录像后处理、索引构建、外部 API 同步。


2. 必须有运维出口

DLQ 不是垃圾桶,需要:

  • 可视化查询(按时间、类型、租户);
  • 人工重放 与 批量丢弃;
  • 告警:DLQ 深度超阈。

3. 根因分类

  • 对端不可用:应 暂停重试 或 熔断;
  • 数据 poison pill:某条消息 必失败,需 跳过或修复数据;
  • 代码 bug:重放前需 发补丁,否则 DLQ 无限堆积。

4. 补偿作业(Reconciliation)

定期任务对比 「应为状态」与「实际状态」:

  • DB 中 录像条目 与 文件是否存在;
  • 设备在线标志 与 最近心跳;
  • 外部系统订单 与 本地记录。

补偿要能 幂等,避免 重复写。


5. 与消息堆积的关系

DLQ 增长过快可能是 下游大面积故障;需区分 暂时性 与 结构性。《消息堆积与异步任务降级》FAQ 中的降级策略应 联动 DLQ 告警。


死信是 系统的体检报告;没有 DLQ 的消息系统往往把失败 伪装成成功或静默丢失。