Kue:连续处理/轮询队列的最佳实践

连续处理添加到队列中的项目的最佳方式是什么? 我看到下面的方法

queue.process 

https://github.com/Automattic/kue#processing-jobs

但是这会处理并返回。 这个通话后添加的项目显然不被处理。

我想这样做:

 queue.on('job enqueue', function(id, type){ queue.process('email', function (job, done) { console.log('processing one: ' + job.id); done(null); }); }); 

但不知道这是否会触发多个进程方法忽略当前的队列状态?

编辑:

我已经创build了一个处理程序来侦听“电子邮件”types,但只有在下面的情况下才会调用它。 除非我错过了一些东西,否则我会期待这个过程在这里运行10次?

 const queue = kue.createQueue(); queue.process('email', function (job, done) { email(job.id, job.data, done); }); var email = function(id, email, done) { console.log('job: %s, sent to: %s number: %s', id, email.to, email.number); done(null, {result: 'OK'}); }; queue .on('job enqueue', function (id, type) { console.log('job %s got queued of type %s with id %s', id, type); }) .on('job complete', function (id, result) { console.log('job complete: ' + id); }); for (var i = 0; i < 10; i++) { queue .create('email', { title: 'welcome email for tj', number: i, to: 'tj@learnboost.com', template: 'welcome-email' }) .removeOnComplete(true) .save(); } 

传递给queue.process的函数将为每个入队作业调用。

把它看作一个事件处理程序:它会“侦听”(在这种情况下) “电子邮件”事件/作业,并为每个处理函数调用。 所以这个调用后添加的项目显然没有被处理是不正确的。

根据精细的手册 , “默认情况下,对queue.process()的调用queue.process()只能接受一个作业进行处理” ,但可以增加并发性:

 queue.process('email', 20, function(job, done){ // ... }); 

显示处理程序的一些示例代码被每个新作业调用:

 const kue = require('kue'); const queue = kue.createQueue(); queue.process('email', function(job, done){ console.log('got job', job.data); done(); }); setInterval(() => { queue.create('email', { timestamp : new Date() }).save(); }, 1000);