如何使用nodejs处理在SQL数据库中查询和更新表的CronJob?

问题描述 投票:0回答:1

我需要运行一个CronJob,它执行三个相互依赖的异步任务,在CronJob配置中提到一定的时间间隔。

异步任务-1:查询表以获取特定条件的结果

异步任务-2:对Task-1中获取的结果执行异步操作

异步任务-3:使用在任务-2中执行的操作更新相应ID的表条目。

我无法弄清楚,如果下一个CronJob的下一个间隔在第一个间隔结束的任务之前开始会发生什么。如何管理呢?

更具体的问题:有没有办法可以在sql表和正在执行的任务之间保持同步,这样如果UPDATE TASK在一个周期中处于挂起状态,它就不会在下一个周期执行相同的任务。

我正在使用node-cron npm模块来开发CronJob。

javascript node.js cron async.js node-cron
1个回答
2
投票

不幸的是,cron不支持作业之间的依赖关系,因此您必须自己处理。你基本上有两个选择:

  • 将任务合并为一个任务
  • 在某个地方有一个标志,让Task-n知道Task-n-1是否已成功完成

如果你能够合并任务,你的生活会更简单,因为你可以使用你在JavaScript中习惯的工具。如果没有,你可以这样做:

  • 异步任务-1查询数据库并将结果保存到已知位置(例如2018-08-31-task-1-results.csv
  • 异步任务-2检查2018-08-31-task-1-results.csv是否存在。如果是,它知道前一个任务是成功的,并且可以处理文件并将输出保存到另一个文件(例如2018-08-31-task-2-results.csv
  • 异步任务-3与Async Task-2类似地进行。

换句话说,任务不是直接相互依赖,而是依赖于先前任务生成的输出。这允许您重新运行任务并记录其输出。我的例子是使用文件,但它可以是所有任务都可以访问的任何内容,例如中间表。

将来,如果你不得不手写这些依赖链,我建议你考虑使用LuigiAirflow这样的许多任务管道框架之一。

© www.soinside.com 2019 - 2024. All rights reserved.