AgendaNode.js 定时任务怎么做才不失控一篇讲清这个轻量作业调度库【免费下载链接】agendaLightweight job scheduling for Node.js项目地址: https://gitcode.com/gh_mirrors/ag/agenda先说个扎心的场景服务一多setTimeout满天飞cron 脚本散在 crontab 里哪个任务跑挂了、跑重了全靠翻日志猜。你真正缺的不是某个定时器而是一个能把任务定义、执行状态、失败重试统一管起来的作业调度器。Agenda 就是干这个的——一个为 Node.js 写的轻量定时任务调度库任务存进 MongoDB、PostgreSQL 或 Redis调度靠 cron 表达式或 3 minutes 这种人话间隔优先级、并发、退避重试这些细节全部在define()里一行行配完且整个 API 是 Promise 风格、全量 TypeScript 类型。10 行代码跑通第一个定时任务传统方案你得先想清楚队列、持久化、锁、重试各用什么组件这里一条安装命令加一个最小示例就完事import { Agenda } from agenda; import { MongoBackend } from agendajs/mongo-backend; const agenda new Agenda({ backend: new MongoBackend({ address: mongodb://127.0.0.1/agenda }) }); agenda.define(delete old users, async job { await User.remove({ lastLogIn: { $lt: twoDaysAgo } }); }); await agenda.start(); await agenda.every(3 minutes, delete old users);every()也可以直接传 cron 表达式比如*/3 * * * *一次性任务用agenda.now()或agenda.schedule(in 20 minutes, ...)都是同样的风格。存储可插拔MongoDB、PostgreSQL、Redis 随你挑上面示例用的是官方 MongoDB 后端v6 起拆成了独立包这是它相对旧版最大的变化。核心思路是存储和实时通知都归到AgendaBackend接口后面所以换存储不用改业务代码。选了 MongoDBChange Streams 顺手给你实时通知选 PostgreSQL 走 LISTEN/NOTIFY选 Redis 走 Pub/Sub三者甚至能混搭——数据放 Mongo、通知走 Redis 也行。想验证轻量是不是吹的看 packages/agenda/ 的依赖清单就知道cron-parser、date.js、debug、human-interval、luxon就 5 个没有把重量级组件塞进核心。重试、合并、进度调度器真正救命的细节任务失败不用自己写重试循环backoff选项支持常量、线性、指数三种策略还能用when()只给超时报错重试、其他错误直接失败。高频写入怕刷爆下游unique()加.debounce(2000)就能把一串快速提交合并成一次执行。长任务也不怕锁过期——touch()可以续锁并上报 0~100 的进度配合priority、concurrency、lockLifetime调度行为基本都摆在明面上可调。进程要下线时drain()会等在跑的任务收尾K8s 滚动发布不会丢任务。想看任务现在在干嘛挂个面板就行这个 monorepo 里还带了两个可选组件packages/agendash/ 是 Web 管理界面任务列表、日志、统计一目了然能挂进 Express、Fastify、Hapi、Koapackages/agenda-rest/ 则提供独立 REST API方便对接你自己的运维工具。不想自己画监控页面这俩直接省掉。下一步本地有现成演示可跑git clone https://gitcode.com/gh_mirrors/ag/agenda之后用npx tsx examples/basic-mongodb.ts先让一个任务转起来再按 examples/README.md 逐个试优先级、退避重试、优雅停机。完整配置说明都在 README.mdv5 老用户升级前记得翻 docs/migration-guide-v6.md要写自定义存储驱动参考 docs/custom-database-driver.md 即可。【免费下载链接】agendaLightweight job scheduling for Node.js项目地址: https://gitcode.com/gh_mirrors/ag/agenda创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?