建议大家不要使用node-schedule这个模块了吧,被坑了一下
发布于 6 年前 作者 cnlile 17504 次浏览 来自 分享

因为这个问题:https://github.com/node-schedule/node-schedule/commit/28fa70a94dd17ef84fbc627aa7c8f3111707f1d4 定时器在预定时间执行了2次。。。造成了系统错误,就是在本来2:00执行的错误。。结果在1:59:59 999 执行一次,又在2:00:00 001执行了一次,造成了系统大量的错误数据。。。也直接造成了后面2天不停的修复数据,还有一些经济损失。。。 另外,网上还发现这个模块有闰年问题等等。。。 得出教训,测试一定要充分,对开源模块,不要觉得star 多,就放心使用,坑无处不在。 后面对这个任务事务进行了锁控制,只能执行一个进程。。。 虽然,这个模块有版本更新,还是不敢再用了。。。

19 回复

一直用 crontab 。。。

来自✨ Node.js开源项目精选

看了老半天,看不懂这个pr是修了啥?可以解释一下吗?

egg-schdule 了解下~

因为是js写的😂😂😂,有时候我自己写的东西我都不敢确定它100%可靠

@zengming00 跟 js 有什么关系?质量靠完善的单元测试保障

@atian25 因为历史悠久的包里面的代码使用了更多js技巧,而这些技巧导致了难以维护和隐晦的bug,单元测试并不能覆盖100%的场景

@zengming00 该淘汰的就淘汰掉吧~

其实,更多的是你们的任务写得有问题,既然是计划任务,就要考虑任务中断或者多次执行,尤其是对数据库的操作。比如,每小时执行一次,如果有一次未执行怎么办,如果有两个端同时执行了怎么办?还是要写严谨。可以考虑redLock辅助一下,避免多次执行。

@fhawk 这个是个小概率事件,后来发现问题后测试,大概我连续跑10个定时任务,每个任务10分钟一次执行,跑了一个礼拜才出现几条。。。。当初也是考虑多进程问题,特意还写了进程管理的东西,竞选出leader 和 member 进程,只有leader 进程可以执行。。进程中断,也会竞选出新的leader。。这个东西,也测了好两天,没问题才上去的。。。哎。。。。还是考虑不周全啊

这玩意,就和前面大佬说的,上egg 吧,这段时间看看源码感觉很舒服

@jxycbjhc 用typescript,上thinkjs,更舒服,哈哈~~

其实这个node-schedule就是有问题,会重复

@fhawk 讲真,对typescript不太感冒,招人也不好招,thinkjs就更不用说了,为了上区块链的车,go语言值得搞

ts 只是一种选择,根据团队技术选型来决定。

并不是 thinkjs 才能用 ts,egg 也早就支持 ts 了。想起之前 Angular 鄙视 Vue 不能 TS 那事。

@jxycbjhc 那 nest.js 岂不是更舒服?

@jxycbjhc 我们招的 java 转node ,上 nest.js 框架~很好招,上手也就2-3周

@zuohuadong 可能我们这边不会这样干,要换也是换egg, 企业级的框架很难得, 特别是它里面的多进程增强模式,反正看源码是舒心。

推荐用bull

@jxycbjhc 那 nest源码更舒心: https://github.com/nestjs/nest ,完美支持 ts 装饰器,注解,Ioc 一应俱全。看完对egg 就没兴趣了。 一般我们自己部署是 pm2 或者 docker 。

回到顶部