简介
moleculer-scheduler 是一个基于 moleculer 微服务框架的调度工具,用于实现定时任务。它具有时间精度高、并发能力强等优点,并且使用方便,性能稳定等优点。
安装
可以使用 npm 进行安装:
npm install moleculer-scheduler
快速入门
在使用 moleculer-scheduler 之前,需要先创建一个 Moleculer 服务。以下是一个简单的服务定义:
-- -------------------- ---- ------- --- - ------------- - - --------------------- --- - --------- - - ------------------------------- --- ------ - --- --------------- ------- -------- --------- ------- --- ---------------------- ----- ------------- ------- ------------ --------- - -- ------- --------- - ----- - - - - --- -- -- - ----------------- ---- ---- --- ----- -- ----------- - - - --- -- ---- ---------------
在上面的例子中,我们先创建了一个 Moleculer 服务,并且混合了 Scheduler mixin。在服务的 settings 中,我们定义了任务调度器,并且设置了一个定时任务,该任务每 10 秒钟执行一次,输出 "This task will run every 10 seconds." 消息。
配置
moleculer-scheduler 的配置信息是通过在 Moleculer 服务的 settings 属性中设置的。具体配置选项如下:
schedule
type: Object
定义任务调度器。它是一个 key-value 对象,其中 key 为 cron 表达式,value 为需要执行的任务。
cron 表达式是一个时间表达式,它的格式如下:
* * * * * * - - - - - - | | | | | | | | | | | ----- 周几 (0 - 7) (星期天为0和7) | | | | ------- 月份 (1 - 12) | | | --------- 日(1 - 31) | | ----------- 小时(0 - 23) | ------------- 分钟(0 - 59)
下面是一个特例,每天早上 8:30 和下午 14:30 执行任务:
schedule: { '30 8 * * *': () => { console.log('This task will run at 8:30 every day.'); }, '30 14 * * *': () => { console.log('This task will run at 14:30 every day.'); }, }
timezone
type: String
指定时区。默认使用系统时区。可以使用任何 Moment.js 支持的时区。
下面的例子设置了时区为 'Asia/Shanghai':
timezone: 'Asia/Shanghai'
方法
addTask(cron, handler)
添加一个任务。
cron
,类型为字符串,表示 cron 表达式。handler
,类型为函数,表示需要执行的任务。
下面的例子添加一个每天早上 6 点执行的任务:
this.addTask('0 6 * * *', () => { console.log('This task will run at 6:00 every day.'); });
removeTask(cron, handler)
移除一个任务。
cron
,类型为字符串,表示 cron 表达式。handler
,类型为函数,表示需要执行的任务。
下面的例子移除了前面添加的任务:
this.removeTask('0 6 * * *', () => { console.log('This task will run at 6:00 every day.'); });
removeAllTasks()
移除所有任务。
this.removeAllTasks();
事件
moleculer-scheduler 支持以下事件:
$scheduler.task.add
添加任务时触发。
broker.on('$scheduler.task.add', ({ cron, handler }) => { console.log(`Task added by cron '${cron}'`); handler(); });
$scheduler.task.remove
移除任务时触发。
broker.on('$scheduler.task.remove', ({ cron }) => { console.log(`Task removed by cron '${cron}'`); });
示例代码
-- -------------------- ---- ------- --- - ------------- - - --------------------- --- - --------- - - ------------------------------- --- ------ - --- --------------- ------- -------- --------- ------- --- ---------------------- ----- ------------- ------- ------------ --------- - --------- - -- ---- - - -- - - - --- -- -- - ----------------- ---- ---- --- -- ---- ----- ------- -- -- ----- - - -- -- - - --- -- -- - ----------------- ---- ---- --- -- ---- -- ----- ---------- -- -- -------- -- - - - --- -- -- - ----------------- ---- ---- --- ----- - -------- - - - --- ---------------
结语
moleculer-scheduler 是一个非常好用的定时任务工具,它能够很好地帮助开发者实现复杂的任务调度需求。在使用时只需要记住 cron 表达式的规则,就可以非常方便地创建定时任务。相比于手写定时任务代码,使用 moleculer-scheduler 可以大大降低开发难度和维护成本。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6006735a890c4f7277583e72