Agenda 持久化计划代理作业
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md 的官方安装指南,为当前 AI 助手安装 @user_3c6cb52e/run-durable-scheduled-agent-jobs-in-node-js-with-agenda 技能。
技能介绍
要解决的问题
当 Agent 需要在固定节奏下执行任务时,最常见的做法是 setTimeout / setInterval 这类进程内定时器。这类方案的问题很实际:进程重启后定时器全部丢失,任务没有持久化;单机调度无法覆盖多实例部署;缺少重试机制,一次失败就可能被永久跳过。对于需要长期运行的代理作业,这些短板会直接变成漏跑和状态不一致。
工作方式
该技能基于 Agenda——一个轻量的 Node.js 作业调度库,把调度状态放进外部持久化后端,由后台 worker 轮询执行。核心能力包括:
- 持久化调度:任务定义与调度信息存放在 MongoDB、PostgreSQL 或 Redis 中,进程重启后不丢失;
- 重试与并发控制:支持失败重试策略与任务锁定,避免同一作业被多个 worker 重复执行;
- 多后端支持:通过官方 backend 适配三种存储;如果 MongoDB 是副本集部署(哪怕是单节点副本集),还可以启用
MongoChangeStreamNotificationChannel,获得原生实时通知,无需额外依赖。
基本使用路径是:创建 Agenda 实例并连接存储,用 agenda.define 注册作业处理器,通过 agenda.schedule / agenda.every 安排执行计划,最后 agenda.start() 启动后台 worker。
适用边界与注意点
- 仅支持 ESM,需要 Node.js 18+,CommonJS 项目要评估迁移成本;
- 需要自行准备可用的 MongoDB(v4+)、PostgreSQL 或 Redis 实例;
- 能力范围是「计划任务 + 后台执行」,不包含分布式限流、优先级队列等高级调度特性;
- Change Stream 通知依赖副本集,单机 MongoDB 无法使用该通道。
使用场景
- AI 代理需要每天定时从数据库拉取数据生成报告,进程重启后调度不能丢失
- 多实例服务共享同一任务队列,需要防止同一代理作业被多个 worker 重复执行
- 后台代理作业执行失败后要自动重试,并依赖锁机制避免任务重叠运行
- 需要按固定节奏触发外部 API 调用,调度状态要落在 MongoDB 或 Redis 里
适合人员
- 独立开发者:需要在单机部署里让代理按计划稳定运行,不希望定时器随进程重启而消失
- 后端工程师:负责多实例服务,需要把定时代理作业落到共享存储,保证不被重复执行
- 技术负责人:在评估把现有 setInterval 脚本迁移到 Agenda,需要确认重试、并发锁和后端选型
- 运维/SRE:要为代理作业准备 MongoDB 或 Redis 持久化后端,并规划副本集以启用实时通知