来自客户的Kue工作进展

时间:2015-10-27 16:56:05

标签: node.js heroku redis message-queue kue

我正在运行一个heroku应用程序,后台工作人员使用Kue处理作业。因为heroku终止并重新启动任何超过30秒的请求,所以我最终在jobs.create()上向客户端发送了一个响应(在它完成之前)。

由于其中一些工作需要几分钟才能完成,从客户端检查进度的最佳方法是什么?

到目前为止,我能看到的最佳解决方案是将作业ID发送回客户端,然后每x秒检查一次作业进度:

var job = jobs.create(type, data).save(function () {
   res.send(200, job.id);
});
...
kue.Job.get(id, function (err, job) {
   res.send({ progress: job._progress, state: job._state })
}

1 个答案:

答案 0 :(得分:0)

任何时候你有一份可能需要的工作>要完成30秒,您应该轮询而不是依赖于一个非常长的请求,以免在某处取消或破坏。对于刷新的客户(如果您的工作需要很长时间),轮询也更具弹性:

https://devcenter.heroku.com/articles/asynchronous-web-worker-model-using-rabbitmq-in-node#4-poll-for-changes

this.pollInterval = setInterval(poll.bind(this), 2000);