SuperAPI AI 工具集

iii-dead-letter-queues

部署与运维

查看项目

更新于 10-15 18:31

技能介绍

用途

iii-dead-letter-queues 用于检查和重新投递(redrive)那些已经耗尽所有重试次数的队列任务。它适用于处理失败的队列任务、调试处理错误,或实现重试策略的场景。该技能对应 SQS DLQ、RabbitMQ dead-letter exchanges 等同类机制。

主要能力

  • 任务在达到 max_retries 上限后,经过指数退避(backoff_ms * 2^attempt)进入 DLQ。
  • 每个 DLQ 条目保留原始负载、最后错误、时间戳和任务元数据。
  • 通过内置的 iii::queue::redrive 函数或 iii trigger CLI 命令进行重投。
  • 重投会将尝试计数器重置为零,让任务获得全新的重试周期。
  • 支持在 Builtin 和 RabbitMQ 适配器上使用 DLQ。

使用方式

技能涉及以下 iii 原语:

  • trigger({ function_id: 'iii::queue::redrive', payload: { queue } }):重投指定队列的所有 DLQ 任务。
  • trigger({ function_id: 'iii::queue::status', payload: { queue } }):检查队列和 DLQ 状态。
  • iii trigger --function-id='iii::queue::redrive' --payload='{"queue":"name"}':CLI 重投命令(属于引擎二进制文件的一部分)。
  • --timeout-ms:CLI 标志,用于设置触发超时(默认 30 秒)。
  • queue_configs(位于 iii-config.yaml):配置 max_retries 和 backoff_ms。

常见代码模式包括:

  • await iii.trigger({ function_id: 'iii::queue::redrive', payload: { queue: 'payment' } }) — 通过 SDK 重投。
  • iii trigger --function-id='iii::queue::redrive' --payload='{"queue": "payment"}' — 通过 CLI 重投。
  • iii trigger --function-id='iii::queue::redrive' --payload='{"queue": "payment"}' --timeout-ms=60000 — 使用自定义超时。
  • 重投返回 { queue: 'payment', redriven: 12 },表示重放任务的数量。
  • 在 RabbitMQ UI(http://localhost:15672)中检查 iii.__fn_queue::{name}::dlq.queue。

参考实现提供 JavaScript(../references/dead-letter-queues.js)、Python(../references/dead-letter-queues.py)和 Rust(../references/dead-letter-queues.rs)版本,涵盖检查 DLQ 状态、通过 SDK 和 CLI 重投失败任务,以及配置重试行为。

适用场景

  • 处理失败的队列任务。
  • 调试处理错误。
  • 实现重试策略。
  • 构建管理端点,调用 iii::queue::redrive 进行运维控制。
  • 使用 iii::queue::status 在重投前后检查 DLQ 深度。
  • 在开发/测试中使用较低的重试次数以更快暴露失败。
  • 在生产环境使用 RabbitMQ 时,通过管理 UI 进行详细的消息检查。
  • 考虑构建在 DLQ 深度阈值上触发的告警函数。

限制与边界

  • 并非每个队列失败都需要手动 DLQ 干预。
  • 始终先调查并部署修复,再执行重投——盲目重投会重复失败。
  • 队列处理模式(入队、并发、FIFO)应优先使用 iii-queue-processing。
  • 队列配置(重试、退避、适配器)应优先使用 iii-engine-config。
  • 函数注册和触发器应优先使用 iii-functions-and-triggers。
  • 仅当主要问题是检查或重投失败任务时,才使用本技能。
  • 不得将本技能作为无关任务的通用回退方案。
  • 当有更具体的 iii 技能更合适时,不得应用本技能。
  • 应用示例前始终验证环境和安全约束。

架构说明

队列消费者处理任务失败。引擎按指数退避重试,直到 max_retries。一旦耗尽,消息移入 DLQ。操作者检查失败、部署修复,然后重投 DLQ 以重放所有失败任务。

引擎配置

队列的 max_retries 和 backoff_ms 在 iii-config.yaml 的 queue_configs 下按队列设置。完整注释配置参考见 ../references/iii-config.yaml。

最佳实践

  • 先调查失败、部署修复,再重投。
  • 将 DLQ 深度作为运维告警信号进行监控。
  • 根据失败容忍度在 queue_configs 中设置 max_retries 和 backoff_ms。