什么是 npm 包 agenda?
Agenda 是一个 Node.js 的机会调度库,可以用来描述和执行定期运行的任务。它支持基于时间的和类似于 cron 的任务,有助于在 Node.js 应用程序中处理常规和复杂的任务调度。使用该库可以避免在代码中编写自定义时间表和任务执行器,并且可以以一种高度可组合和可重用的方式定义和执行任务。
如何安装和使用?
- 在 Node.js 应用程序中安装 Agenda
npm install --save agenda
- 引入 Agenda
const Agenda = require('agenda');
- 创建 Agenda 实例,并连接至 MongoDB 数据库
const agenda = new Agenda({ db: { address: 'mongodb://localhost/agenda' } });
- 创建和定义任务
agenda.define('hello', job => { console.log('hello world'); });
- 设置任务计划并启动 Agenda
agenda.on('ready', () => { agenda.every('10 minutes', 'hello'); agenda.start(); });
计划任务
要创建定期运行的任务,可以使用 every() 或 schedule() 方法。它们都接受两个参数:一个时间字符串和任务名称。时间字符串可以是 cron 风格的时间表达式或具有人类可读格式的标准时间格式。
// 每天凌晨执行一次任务 agenda.every('0 0 * * *', 'task'); // 每小时执行一次任务 agenda.every('1 hour', 'task'); // 每隔 10 秒执行一次任务 agenda.every('10 seconds', 'task');
执行任务
有三种方法可以执行已定义的任务:processEvery()、processOne() 和 now()。
processEvery()
processEvery() 方法触发的任务将运行在规定时间周期内。例如,如果你在启动时调用 agenda.every('10 seconds', 'task'),那么每隔 10 秒 task 任务就会自动执行。
agenda.processEvery('5 minutes');
processOne()
processOne() 方法只会立即执行一次任务,并不会定期运行。该方法适用于指定任务组,例如启动时执行一次特定任务,然后每隔 10 分钟执行一次特定任务。
// 立即执行一次任务 agenda.now('job name'); // 立即执行一次带参数的任务 agenda.now('job name', { param: 'value' }); // 立即执行一次任务组 agenda.now([ 'job a', 'job b' ]);
now()
now() 方法在当前执行栈中运行一个任务。
agenda.schedule(new Date(), 'job name');
添加参数
您可以向任务添加参数以获取更多的灵活性。参数可以是任何基本类型或 JSON 对象。添加参数的方式有两种,一种是在定义任务时将参数传递给 run() 方法,另一种是在创建任务时使用 data() 方法。
// 定义任务时传递参数 agenda.define('send email', (job, done) => { const { to, subject, body } = job.attrs.data; // Send email using provided data }); agenda.now('send email', { to: 'someone@example.com', subject: 'Hello, World!', body: 'How are you?' });
// 创建任务时使用 data() 方法 const emailJob = agenda.create('send email').data({ to: 'someone@example.com', subject: 'Hello, World!', body: 'How are you?' });
指定任务选项
您可以通过设置一些任务选项来更改任务的行为和属性。常用的选项包括 priority、requiresLock、lockLifetime 和 concurrency。有关所有可用选项的完整列表,请参阅 Agenda 文档。
const job = agenda.schedule('in 5 minutes', 'test'); job.priority('high').unique({ key: 'someUniqueString' }); job.save();
结论
Agenda 是一个非常有用和方便的 Node.js 库,可以帮助您轻松地处理复杂的任务调度。希望这篇文章能够给您提供足够的指导和帮助,让您能够更好地使用 npm 包 agenda。如果您有任何疑问或建议,请随时在评论区留言,我们会为您提供更多的学习资源和支持!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/57911