使用节点 JS 运行连续后台作业

Run continuous Background Job with Node JS

本文关键字:连续 后台作业 运行 JS 节点      更新时间:2023-09-26

考虑有一个任务A和其他n个任务。我想将任务 A 与其他 n 个任务并行运行。任务 A 只是每 5 秒从队列中获取数据。

我是Node JS的新手。有没有办法在后台运行此任务/作业 A,或者有任何解决方案?

很大

程度上取决于任务是什么。如果我理解你的问题,你可以通过两种方式做到这一点:1,使用计时器运行函数,2,生成一个子进程。

1

function taskA(){...}
setInterval(taskA,5000);

阿拉伯数字

//same code as 1, but in a child process
var spawn = require('child_process').spawn,
ls    = spawn('taskA.js');
//taskA.js has the code from example 1

如果您在主进程中做很多其他事情,您可能更喜欢 2 到 1,因为节点是单线程的。还应该注意的是,在某些情况下可能有更好的方法来做到这一点。例如,在基于云的 Web 应用中,我可能依赖 PAAS 的服务来运行后台任务。您可能还想研究 https://github.com/nodejitsu/forever-monitor

这是一篇关于如何在 Web 应用中处理后台作业的精彩文章。 https://devcenter.heroku.com/articles/background-jobs-queueing 但是,它不是特定于节点的。它也特定于Heroku平台。

您可以使用

标准的setTimeout()方法。

function task() {
  console.log("Timer");
  setTimeout(task, 5000);
}
task();

看看 Kue - https://github.com/LearnBoost/kue这是一个易于使用的节点消息队列系统。 基本上,您将有一个节点程序将内容放入队列,而其他进程则处理队列。

因此,任务 A 将每 5 秒运行一次(如果您愿意,则为 cron,或其他系统)。 它将查看队列并处理相关项目。 其他 n 个工作线程将共享 Kue 的配置,但只会推送事件。