在Node.js中实现任务调度与执行
来源:互联网 发布:施工网络进度计划 编辑:程序博客网 时间:2024/05/14 06:00
在Node.js中实现任务调度与执行
作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs
批处理是业务开发中经常会遇到的需求,比如银行对账单的处理,又比如广告邮件的推送。
Node.js在批处理方面也有一些优秀的库,node-schedule就是其中之一。
node-schedule是一个轻量级的、基于Node.js的、类似于cron的调度器工具。其介绍可查看: https://www.npmjs.com/package/node-schedule
node-schedule允许在指定的日期时间调度执行任意任务(任意的函数),还支持循环规则。node-schedule内部只使用了单个计时器。
node-schedule是基于时间的调度器,而不是基于时间间隔的调度器。假如你有这样的需求“每隔5分钟运行某个函数一次”,你会觉得使用基于时间间隔的调度方式更适合,比如setInterval(),使用非常方便。假如你的需求是“每小时的第5分钟和第50分钟运行某个函数一次”,那么你会觉得基于时间的调度方式更适合。
还要注意,与cron不同,node-schedule在Windows系统也能得到完美的支持。
需要注意的是,node-schedule的设计目标是用于进程间的调度,也即调度的作业在调度时会运行相关脚本,当脚本执行完成后调度将消失。如果希望在脚本未运行的时候持续调度作业,那么最好还是使用cron。
在node-schedule中,每一个被调度的作业都是使用Job对象来描述的。可以手动创建Job,然后执行schedule()方法来应用调度,或使用scheduleJob()。
Job对象是EventEmitter的,在每一次调度执行时发出一个运行事件。在调度的时间到来时,它还会发出被调度的事件。当调度开始之前,要取消调度,可以发取消事件。这些事件都接收JavaScript的日期对象作为参数。
要注意,作业在首次调度时是立即执行的,因此如果你使用scheduleJob()创建作业,会失去首次立即调度的事件。
还要注意,取消事件是canceled,表达方式采用了美国英语。
要安装node-schedule很简单,执行:
npm install node-schedule
如果你用过cron,了解cron表达式的格式,使用它则更简单。
Cron风格的调度
cron格式的组成如下:
* * * * * *┬ ┬ ┬ ┬ ┬ ┬│ │ │ │ │ |│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)│ │ │ │ └───── month (1 - 12)│ │ │ └────────── day of month (1 - 31)│ │ └─────────────── hour (0 - 23)│ └──────────────────── minute (0 - 59)└───────────────────────── second (0 - 59, OPTIONAL)
下面来看一个例子:
var scheduler = require('node-schedule');var montlyJob = scheduler.scheduleJob('0 0 1 * *', function(){ console.log('I run the first day of the month');});
还有使用JavaScript对象的方法:
var scheduler = require('node-schedule');var rule = new scheduler.RecurrenceRule();rule.hour = 7rule.dayOfWeek = new scheduler.Range(0,6)var dailyJob = scheduler.scheduleJob(date, function(){ console.log('I run on days at 7:00');});scheduler.scheduleJob(rule,task);
还可以跳过指定日期来调度任务:
var scheduler = require('node-schedule');var date = new Date(2017, 1, 1, 0, 0, 0);var newYearJob = scheduler.scheduleJob(date, function() { console.log("Happy new year");});
要取消调度的作业也很简单,这样:
newYearJob.cancel();
- 在Node.js中实现任务调度与执行
- 在oralce中实现定期执行任务
- 在oralce中实现定期执行任务
- 在Tomcat中实现定时执行任务
- 在Node.js中使用RabbitMQ系列二 任务队列
- 在Node.js中使用RabbitMQ系列二 任务队列
- 如何在Web工程中实现任务计划调度
- 在Web工程中实现任务计划调度
- 在Web工程中实现任务计划调度
- 在Web工程中实现任务计划调度
- 在Java Web应用中实现任务有效调度
- 在Spring框架中集成Quartz实现任务调度
- 在Web应用中使用Quatz实现任务调度步骤
- 如何在Web工程中实现任务计划调度
- 在Spring中使用JDK定时器实现调度任务
- 在PHP中使用协程实现多任务调度
- 在PHP中使用协程实现多任务调度
- 在PHP中使用协程实现多任务调度
- 深度学习之-caffe预测、特征可视化python接口调用 (6)
- Android使用TabLayout实现选项卡
- Maven项目中不打包 *.hbm.xml 映射文件
- CSS3.0入门笔记(二)
- Hibernate入门(四)之hibernate中session的创建方式
- 在Node.js中实现任务调度与执行
- 大话设计模式-桥接模式
- synchronized的使用方法(2)
- JDK安装与环境变量配置
- poj 3278 bfs
- ArcEngine定义查询
- bzoj3667: Rabin-Miller算法
- Django simple sample
- 初始化块