我通过浏览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));
};
苦厄源代码表明:
type
是工作类型
from
,to
是作业通过指数范围(例如,可以从索引0指定负载作业10中,共有11个作业。)
order
指定取出作业的顺序。默认是asc
。您也可以按照desc
这个工作良好的本地主机。但通过使用内部函数,rangeByType实际上会创建一个新的RedisClient(绑定到localhost,默认),而不是使用提供给kue的那个。这使得使用其他主机上的redis很难做到这一点。我的解决方案是直接查询redis(使用rangeByType中提供的代码) – japrescott