节点工作者进程/ cron作业建议

时间:2013-04-27 23:57:45

标签: node.js cron backgroundworker message-queue

我有一个项目数据库,我需要更新 - 或者更确切地说只是执行 - 每隔一段时间。我正在使用消息队列(Kue)来处理这些作业的并发性,但我将这些作业添加到队列的过程如下所示:

setInterval(function () {
  feed.find({}, function (error, foundModels) {
    jobs.create('update feeds', {
      feeds: foundModels
    }).save()
  })
}, 6000)

像这样轮询是将作业添加到队列的最佳方式,您认为?或者每个feed是否应该使用自己的计时器(例如,每个作业在完成后6个星期后会产生另一个作业)?

1 个答案:

答案 0 :(得分:1)

我通常按照你的方式去做。在您的情况下,它总是以6秒的间隔推动工作。只要您的工作时间不超过6秒,这就没问题了。如果您的工作时间超过6秒,那么您将开始获得积压,并且您需要增加资源来处理更大的负载。如果资源使用率激增并且您无法调整峰值并且您没有自动化流程(您应该),则可能会出现问题。

另一种方法是仅在最后一次呼叫返回后6秒调用您的函数。你这样做是这样的:

function update() {
  feed.find({}, function (error, foundModels) {
    jobs.create('update feeds', {
      feeds: foundModels
    }).save(function() {
      setTimeout(update,6000);
    });
  });
}
setTimeout(update, 6000);

我假设您的.save方法像所有好的异步库一样进行回调。 : - )