Node.js Kue自动处理作业,如果队列不为空

我是Kue新手,有一些问题。 希望你能帮我 :)

我读了所有Kue的文档,但是我看到只有一种方式来处理队列中的作业:手动调用处理。 如果队列为空,我需要尽快处理作业,如果队列不为空,则在先前完成后运行rest作业。 有没有办法做到这一点? 谢谢。

或者,如果我重新提出问题:如果具有特定types的职位将从队列中耗尽,将会发生什么? 我应该再次开始处理,还是在新作业出现后自动进行处理?

实际上,由于服务器端限制了请求,我需要适时传播API请求。

我写了一个js脚本:

 var kue = require('kue') , queue = kue.createQueue(); var job = queue.create('email', { title: 'welcome email for tj' , to: 'tj@learnboost.com' , template: 'welcome-email' }).save( function(err){ if( !err ) console.log( job.id ); }); queue.on('job enqueue', function(id, type){ console.log( 'Job %s got queued of type %s', id, type ); }).on('job complete', function(id, result){ kue.Job.get(id, function(err, job){ if (err) return; job.remove(function(err){ if (err) throw err; console.log('removed completed job #%d', job.id); }); }); }); queue.process('email', function(job, done){ console.log("Processing email: " + job.data.title); email(job.data.to, done); }); function email(address, done) { done(); } var job1 = queue.create('email', { title: 'welcome email for tj 2' , to: 'tj@learnboost.com' , template: 'welcome-email' }).save( function(err){ if( !err ) console.log( job1.id ); }); var job2 = queue.create('email', { title: 'welcome email for tj 3' , to: 'tj@learnboost.com' , template: 'welcome-email' }).save( function(err){ if( !err ) console.log( job2.id ); }); 

node script.js运行这个产生了以下输出:

 29 30 31 Job 29 got queued of type email Job 30 got queued of type email Job 31 got queued of type email Processing email: welcome email for tj Processing email: welcome email for tj 2 removed completed job #29 Processing email: welcome email for tj 3 removed completed job #30 removed completed job #31 

我做了很多次(> 30)。 但有一次删除命令没有按顺序。 但是删除是asynchronous的,所以这是可能的。

 Job 8 got queued of type email Job 9 got queued of type email Job 10 got queued of type email Processing email Processing email removed completed job #10 Processing email removed completed job #8 removed completed job #9 

输出有点不同,因为我在运行之后将标题添加到了处理消息中。 不幸的是,在这个例子中处理顺序并不清楚。 我不能重现它。 🙁

编辑

我添加了一个for循环来更好地调查这个行为。 和quel惊喜:

它接近工作将按照他们工作id的词汇顺序进行处理。

添加的循环:

 for (var i=0; i<20; i++) { var job2 = queue.create('email', { title: 'welcome email for tj ' + (i+4) , to: 'tj@learnboost.com' , template: 'welcome-email' }).save(); 

新产出:

 87 88 109 Job 87 got queued of type email Job 88 got queued of type email Job 89 got queued of type email Job 90 got queued of type email Job 91 got queued of type email Job 92 got queued of type email Job 93 got queued of type email Job 94 got queued of type email Job 95 got queued of type email Job 96 got queued of type email Job 97 got queued of type email Job 98 got queued of type email Job 99 got queued of type email Job 100 got queued of type email Job 101 got queued of type email Job 102 got queued of type email Job 103 got queued of type email Job 104 got queued of type email Job 105 got queued of type email Job 106 got queued of type email Job 107 got queued of type email Job 108 got queued of type email Job 109 got queued of type email Processing email: welcome email for tj 14 Processing email: welcome email for tj 15 removed completed job #100 Processing email: welcome email for tj 16 removed completed job #101 Processing email: welcome email for tj 17 removed completed job #102 Processing email: welcome email for tj 18 removed completed job #103 Processing email: welcome email for tj 19 removed completed job #104 Processing email: welcome email for tj 20 removed completed job #105 Processing email: welcome email for tj 21 removed completed job #106 Processing email: welcome email for tj 22 removed completed job #107 Processing email: welcome email for tj 23 removed completed job #108 Processing email: welcome email for tj removed completed job #109 Processing email: welcome email for tj 2 removed completed job #87 Processing email: welcome email for tj 3 removed completed job #88 Processing email: welcome email for tj 4 removed completed job #89 Processing email: welcome email for tj 5 removed completed job #90 Processing email: welcome email for tj 6 removed completed job #91 Processing email: welcome email for tj 7 removed completed job #92 Processing email: welcome email for tj 8 removed completed job #93 Processing email: welcome email for tj 9 removed completed job #94 Processing email: welcome email for tj 10 removed completed job #95 Processing email: welcome email for tj 11 removed completed job #96 Processing email: welcome email for tj 12 removed completed job #97 Processing email: welcome email for tj 13 removed completed job #98 removed completed job #99 

所以这个行为肯定是可重现的,当工作ID从9到10从99到100从999到1000等等。