1

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

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

你认为这样的轮询是将作业添加到队列中的最佳方式吗?或者每个人都应该feed有自己的计时器(例如,每个工作都会在完成后 6 后产生另一个工作)?

4

1 回答 1

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方法像所有好的异步库一样接受回调。:-)

于 2013-04-28T00:16:35.163 回答