因为这个问题:https://github.com/node-schedule/node-schedule/commit/28fa70a94dd17ef84fbc627aa7c8f3111707f1d4 定时器在预定时间执行了2次。。。造成了系统错误,就是在本来2:00执行的错误。。结果在1:59:59 999 执行一次,又在2:00:00 001执行了一次,造成了系统大量的错误数据。。。也直接造成了后面2天不停的修复数据,还有一些经济损失。。。 另外,网上还发现这个模块有闰年问题等等。。。 得出教训,测试一定要充分,对开源模块,不要觉得star 多,就放心使用,坑无处不在。 后面对这个任务事务进行了锁控制,只能执行一个进程。。。 虽然,这个模块有版本更新,还是不敢再用了。。。
其实,更多的是你们的任务写得有问题,既然是计划任务,就要考虑任务中断或者多次执行,尤其是对数据库的操作。比如,每小时执行一次,如果有一次未执行怎么办,如果有两个端同时执行了怎么办?还是要写严谨。可以考虑redLock辅助一下,避免多次执行。
@fhawk 这个是个小概率事件,后来发现问题后测试,大概我连续跑10个定时任务,每个任务10分钟一次执行,跑了一个礼拜才出现几条。。。。当初也是考虑多进程问题,特意还写了进程管理的东西,竞选出leader 和 member 进程,只有leader 进程可以执行。。进程中断,也会竞选出新的leader。。这个东西,也测了好两天,没问题才上去的。。。哎。。。。还是考虑不周全啊
ts 只是一种选择,根据团队技术选型来决定。
并不是 thinkjs 才能用 ts,egg 也早就支持 ts 了。想起之前 Angular 鄙视 Vue 不能 TS 那事。
@jxycbjhc 那 nest源码更舒心: https://github.com/nestjs/nest ,完美支持 ts 装饰器,注解,Ioc 一应俱全。看完对egg 就没兴趣了。 一般我们自己部署是 pm2 或者 docker 。