乐趣区

关于node.js:Node定时任务怎么做

原文你地址:Node 定时工作

背景

目前咱们遇到了这样一个需要,每个用户都能够自定义定时推送,定时工作的工夫配置由用户本人配置,随时批改,而不是传统的由服务器设定好工夫跑定时工作。

如果是已知定时工作循环周期,那么 Linux Crontab 定时工作即可实现。在 node 中也曾经有绝对成熟的计划。上面将我本人理解到的 Node 定时工作计划计划做一个介绍。

egg 框架提供的 schduler 定时工作

egg 是阿里旗下的 Node 企业级利用框架,它提供了一套机制给开发者优雅的编写定时工作,具体参考官网文档:https://eggjs.org/zh-cn/basic…,这里不对具体用法做具体论述,只简略讲一下它的配置用法。

1. 动态定时工作,即定时周期,解决逻辑写死。

2. 动静配置定时工作,这种相对来说灵便一点,开发者能够通过配置文件管制定时工作周期。

3. 通过代码手动触发定时工作,咱们能够依据一些逻辑判断是否触发定时工作。

从上述三点看,egg 提供的定时工作不能满足咱们须要用户自行配置定时周期的需要,所以只能寻求其余计划,通过查问材料咱们发现了 node-schedule 的库也提供了定时工作的性能。

node-schedule

在浏览了 node-schudule 的文档 https://www.npmjs.com/package… 之后,他的用法如下:


const schedule = require('node-schedule');

const job = schedule.scheduleJob('42 * * * *', function(){console.log('The answer to life, the universe, and everything!');
});

是的,他反对自定义定时周期,能够满足咱们的需要,能够作为咱们的抉择,Nice!

持续浏览其余开发者的应用文章,发现有一个 node-schedule 的相干问题记录,简要说就是定时器在预约工夫执行了 2 次,具体问题见原文:https://cnodejs.org/topic/5b5…。这是一个低概率的问题,咱们没有去做验证,因为咱们的需要,及时定时器执行两次,对咱们的后果并没有影响,所以这不是妨碍咱们应用它的阻碍,有趣味的同学能够去测测 bug。

写在最初

最初这里是对咱们本人我的项目定时定时工作解决方案的总结,不感兴趣的同学可略过。

咱们的后端就是用的 egg 框架,所以最初咱们的解决方案是在 agent 过程中加了 node-schdule 的定时器,用户的定时器都会同步的 agent 过程中执行,目前咱们的用户量不大,临时只想到了这种解决形式,后续起量后可能会分布式部署后盾,这会是一个问题,量大的话单过程跑也会是一个问题,并且 egg 自身不倡议在 agent 过程中做太多业务相干的货色。还有个比拟重要的是 agent 是辅助过程,一些 work 的公共工作切实 agent 中实现的,agent 产生未捕捉的谬误不会退出重启,所以容错解决必须要做,而且要做好。

如果你有更好的计划,欢送 留言 通知咱们。

退出移动版