在Node.js中实现任务调度与执行

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/51347380 在Node.js中实现任务调度与执行作者:chszs,未经博主允许不得转载。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/51347380

在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 = 7
rule.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();
目录
相关文章
|
2月前
|
JavaScript
NodeJs的安装
文章介绍了Node.js的安装步骤和如何创建第一个Node.js应用。包括从官网下载安装包、安装过程、验证安装是否成功,以及使用Node.js监听端口构建简单服务器的示例代码。
NodeJs的安装
|
1月前
|
JavaScript 开发工具 git
已安装nodejs但是安装hexo报错
已安装nodejs但是安装hexo报错
25 2
|
2月前
|
存储 JavaScript 前端开发
Node 版本控制工具 NVM 的安装和使用(Windows)
本文介绍了NVM(Node Version Manager)的Windows版本——NVM for Windows的安装和使用方法,包括如何安装Node.js的特定版本、列出已安装版本、切换使用不同版本的Node.js,以及其他常用命令,以实现在Windows系统上对Node.js版本的便捷管理。
Node 版本控制工具 NVM 的安装和使用(Windows)
|
1月前
|
Web App开发 JavaScript 前端开发
JavaWeb 22.Node.js_简介和安装
JavaWeb 22.Node.js_简介和安装
|
2月前
|
SQL JavaScript 数据库
sqlite在Windows环境下安装、使用、node.js连接
sqlite在Windows环境下安装、使用、node.js连接
|
2月前
|
JavaScript Linux 开发者
一个用于管理多个 Node.js 版本的安装和切换开源工具
【9月更文挑战第14天】nvm(Node Version Manager)是一个开源工具,用于便捷地管理多个 Node.js 版本。其特点包括:版本安装便捷,支持 LTS 和最新版本;版本切换简单,不影响开发流程;多平台支持,包括 Windows、macOS 和 Linux;社区活跃,持续更新。通过 nvm,开发者可以轻松安装、切换和管理不同项目的 Node.js 版本,提高开发效率。
|
1月前
|
JavaScript 算法 内存技术
如何降低node.js版本(nvm下载安装与使用)
如何降低node.js版本(nvm下载安装与使用)
|
3月前
|
缓存 JavaScript 安全
2022年最新最详细的安装Node.js以及cnpm(详细图解过程、绝对成功)
这篇文章提供了2022年最新最详细的Node.js和cnpm安装教程,包括步骤图解、全局配置路径、cnpm安装命令、nrm的安装与使用,以及如何管理npm源和测试速度。
2022年最新最详细的安装Node.js以及cnpm(详细图解过程、绝对成功)
|
2月前
|
JavaScript 前端开发 Linux
|
2月前
|
JavaScript Linux API
安装NodeJs,好啊好啊
安装NodeJs,好啊好啊