☰
Agenda:Node.js 定时任务怎么做才不失控?一篇讲清这个轻量作业调度库
2026/11/6 4:55:21 网站建设 项目流程

Agenda:Node.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接口后面,所以换存储不用改业务代码。选了 MongoDB,Change 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、Koa;packages/agenda-rest/ 则提供独立 REST API,方便对接你自己的运维工具。不想自己画监控页面,这俩直接省掉。

下一步

本地有现成演示可跑:git clone https://gitcode.com/gh_mirrors/ag/agenda之后用npx tsx examples/basic-mongodb.ts先让一个任务转起来,再按 examples/README.md 逐个试优先级、退避重试、优雅停机。完整配置说明都在 README.md,v5 老用户升级前记得翻 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询