如何在kue中检索具有特定状态的作业?

时间:2013-02-03 03:47:48

标签: node.js kue

我正在使用kue作为我的工作队列,我想知道如果不使用GUI,还剩下多少工作,有多少工作失败,等等。如何检索这类信息?

例如,在开始处理作业队列几分钟后,我想将目前失败的所有作业的状态更新为“非活动”,以便重新启动它们。

我可以在stackoverflow上找到的唯一相关问题是this,但是,它在处理某个事件后会一次处理一个作业。我的担忧是不同的,因为我有兴趣检索具有特定状态的数据库中的所有作业。

this question的答案提到kue库的函数.complete,它检索数据库中所有已完成的作业。其他可能的工作状态是否有类似的功能?

1 个答案:

答案 0 :(得分:17)

我通过浏览kue源代码找到了解决方案。以下代码实现了我的需求:

var redis = require ('redis'),
    kue = require ('kue'),
    redisClient = redis.createClient(6379, "127.0.0.1");

kue.redis.createClient = function () {
    return redisClient;
};

kue.app.listen(3000); 


kue.Job.rangeByType ('job', 'failed', 0, 10, 'asc', function (err, selectedJobs) {
    selectedJobs.forEach(function (job) {
        job.state('inactive').save();
    });
});

供参考,以下是相关的kue源代码:

/queue/job.js:123:

/**
 * Get jobs of `type` and `state`, with the range `from`..`to`
 * and invoke callback `fn(err, ids)`.
 *
 * @param {String} type
 * @param {String} state
 * @param {Number} from
 * @param {Number} to
 * @param {String} order
 * @param {Function} fn
 * @api public
 */

exports.rangeByType = function(type, state, from, to, order, fn){
  redis.client().zrange('q:jobs:' + type + ':' + state, from, to, get(fn, order));
};

Kue源代码表明:

  • type是工作类型
  • fromto是索引的作业范围(例如,您可以指定从索引0到10的加载作业,总共11个作业。)
  • order指定已获取作业的顺序。默认值为asc。您也可以按desc
  • 对其进行排序