簡體   English   中英

如果隊列不為空,則Node.js Kue自動處理作業

[英]Node.js Kue autoprocessing jobs if queue is not empty

我是Kue的新手並且有一些問題。 希望你能幫我 :)

我閱讀了所有Kue的文檔,但我看到只有一種方法來處理隊列中的作業:手動調用處理。 如果隊列為空,我需要在排隊時立即處理作業,如果隊列不為空則在前一個完成后運行休息作業。 有什么辦法嗎? 謝謝。

或者,如果我重新提問:如果具有特定類型的作業將從隊列中耗盡,會發生什么? 我是否應該再次開始處理,或者在新工作出現后立即進行自動停止?

實際上,由於服務器端限制請求,我需要及時傳播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)。 但有一次刪除順序不是按順序。 但刪除是異步的,所以這是可能的。

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循環來更好地調查這種行為。 令人驚訝的是:

它接縫作業將按其作業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時,此行為肯定是可重現的,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM