9

我正在使用kue作为我的作业队列,并且我想在不使用 GUI 的情况下知道还剩下多少作业,有多少作业失败等。如何检索此类信息?

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

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

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

4

2 回答 2

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 源代码:

/队列/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是工作类型
  • from,to是索引的作业范围(例如,您可以指定从索引 0 到 10 的加载作业,总共 11 个作业。)
  • order指定获取作业的顺序。默认为asc。您也可以按以下方式排序desc
于 2013-02-27T09:01:47.953 回答
0

以下作品使用预先存在的queue对象,因此没有 Japrescott 在已接受答案的评论中提到的双重 Redis 连接问题。

queue.cardByType("notifications", "complete", function( err, count ) {
  console.log(count);
});

随意替换为有效状态,以下是有效状态列表。

inactive
complete
active
failed
delayed
于 2021-09-10T11:41:42.843 回答