我在我的一个项目中使用了kue来删除数据库中的陈旧锁。我能够处理单个作业,比如在mongoDB中更新单个文档。
var kue = require('kue')
, queue = kue.createQueue();
queue.process('staleLocks', function(job, done){
removeLock(job.data.id, done);
});
function removeLock(id, done) {
// mongoDB call
done();
}但是,我希望在队列被处理后,通过收集所有ids来一次更新所有文档。我甚至可以存储所有的ids。唯一的问题是,当队列被处理时,我无法跟踪某种类型的事件来同步整个过程。
发布于 2015-09-06 22:54:50
如果我正确理解了您的问题,我认为queue.inactiveCount() described here的队列维护功能可能会有所帮助。
难道您不能只定期检查队列的长度,并在计数为0且收集的锁的数量>0时执行锁删除吗?就像这样
// assume locksid is an array with the collected locks id
var intervalHandle = setInterval( function() {
queue.inactiveCount(function( err, total ){
if (!err && total === 0 && locksid.length > 0 ){
locksid.forEach( function(lock){
removeLock(lock);
})
}
})
}, 2000 );
// somewhere else in your code, you might want
// to stop the interval check
clearInterval( intervalHandle );因为我不知道您的worker是如何构建的,所以我在回调中保留了clearInterval()调用,但如果removeLock()是一次性任务,您甚至可以在forEach()循环完成后调用它。
我希望这能帮到你。
https://stackoverflow.com/questions/32206917
复制相似问题