2015-10-27 5 views
1

Я новичок в Kue и задаю несколько вопросов. Надеюсь, вы можете мне помочь :)Node.js Kue autoprocessing jobs, если очередь не пуста

Я прочитал все документы Kue, но я видел только один способ обработки заданий в очереди: обработка вызова вручную. Мне нужно обрабатывать задания, как только они попадают в очередь, если очередь была пустой и запускать задания на отдых после того, как предыдущее было выполнено, если очередь не пуста. Есть ли способ сделать это? Спасибо.

Или если я перефразирую вопрос: что произойдет, если задания с определенным типом закончится из очереди? Должен ли я снова начать обработку или он будет автозавершен, как только появится новое задание?

На самом деле, мне нужно своевременно распространять запросы API, поскольку запросы на серверные ограничения.

+0

Я слышал о Куэ в первый раз здесь, на ваш вопрос. Это интересно и быстро прочитать документы. Потому что никто другой не ответил: может быть, я не понял его правильно, но не мог ли вы определить событие «событие», в котором вы запускаете обработку, как только задание помещается в очередь? А на событии «завершено» начнется следующая обработка. –

+0

Возможно, я мог бы, но верно ли это? Что делать, если мне нужно начать обработку работы только один раз, и она будет автозавершена для остальных? И callback будет вызван после выполнения каждого задания, так что это нормально, когда у меня есть 1 задание в очереди, но что, если он называется 100 раз, но обработка остановится только после того, как очередь пуста? стр. Вы также можете посмотреть [asyncqueue] (https://github.com/caolan/async#queue), это тоже интересно :) – BadVolt

+1

Спасибо за подсказку. ;-) async - один из моих любимых инструментов для быстрого развития узлов, но kue - это очередь приоритетов с магазином redis и интерфейсом отдыха. ;-) Возможно, я понял ваш вопрос, а киэ-документы полностью ошибались. С 'queue.process' вы определяете только то, как обрабатывается задание в очереди.Вы можете создать столько заданий, сколько хотите, и, насколько вы сохранили, обработка автоматически запускается. Вам не нужно вызывать процесс для каждой работы. Я думаю, что вы хотите по умолчанию. –

ответ

3

Я написал небольшой JS скрипт:

var kue = require('kue') 
    , queue = kue.createQueue(); 


var job = queue.create('email', { 
     title: 'welcome email for tj' 
    , to: '[email protected]' 
    , 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: '[email protected]' 
    , template: 'welcome-email' 
}).save(function(err){ 
    if(!err) console.log(job1.id); 
}); 

var job2 = queue.create('email', { 
     title: 'welcome email for tj 3' 
    , to: '[email protected]' 
    , 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 

Результат немного отличается, потому что после этого запускался заголовок обрабатывающего сообщения. К сожалению, порядок обработки в этом примере не ясен. И я не могу воспроизвести его. :-(

EDIT

Я добавил цикл, чтобы лучше исследовать, что поведение и Quel сюрприз:.

швов рабочих мест будут процессы в лексического порядка их работа ид.

Добавленная цикл:

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

новый OUTP ут:

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 

Так что это поведение, безусловно, будет воспроизводимым, когда работа изменяется идентификатор от 9 до 10 от 99 до 100 от 999 до 1000 и так далее.

+0

Удивительный! Спасибо! – BadVolt

+0

Может быть, нам стоит открыть вопрос в github? Я не думаю, что это нужно поведение – BadVolt

+0

Я планирую интегрировать Kue в некоторые из моих проектов. Я назначил 2 часа в следующую пятницу, чтобы исследовать код Куэ, чтобы доказать свою пригодность. Возможно, я узнаю, что происходит не так, или если это желание поведения (я согласен с вами, это вряд ли может быть желаемым поведением, но вполне возможно, что они не гарантируют определенный порядок.). Если вы не будете использовать эту проблему, я открою ее. –

Смежные вопросы