【问题标题】:How to handle a CronJob that queries and updates a Table in SQL Database using nodejs?如何处理使用 nodejs 查询和更新 SQL 数据库中的表的 CronJob?
【发布时间】:2019-02-06 10:19:13
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: javascript node.js cron async.js node-cron


    【解决方案1】:

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

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

    如果您能够合并任务,您的生活将会变得更加简单,因为您可以使用您在 JavaScript 中习惯使用的工具。如果没有,您可以执行以下操作:

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

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

    将来,如果您继续不得不手写这些依赖链,我建议您考虑使用众多任务管道框架之一,例如 LuigiAirflow

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 2016-05-25
      • 2021-10-25
      • 1970-01-01
      相关资源
      最近更新 更多