我有一个项目数据库,我需要更新 - 或者更确切地说只是执行 - 每隔一段时间。我正在使用消息队列(Kue)来处理这些作业的并发性,但我将这些作业添加到队列的过程如下所示:
setInterval(function () {
feed.find({}, function (error, foundModels) {
jobs.create('update feeds', {
feeds: foundModels
}).save()
})
}, 6000)
像这样轮询是将作业添加到队列的最佳方式,您认为?或者每个feed
是否应该使用自己的计时器(例如,每个作业在完成后6个星期后会产生另一个作业)?
答案 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
方法像所有好的异步库一样进行回调。 : - )