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

时间:2017-04-28 08:55:19

标签: node.js 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);
            });
        });

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

编辑:

我创建了一个处理器来收听电子邮件'类型,但只有在下面的场景下才会调用它。除非我遗漏了某些东西,否则我希望过程在这里运行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();
        }

1 个答案:

答案 0 :(得分:3)

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

将其视为事件处理程序:它“侦听”(在这种情况下)“email”事件/作业,并且对于每个事件处理函数将被调用。因此,在此调用之后添加的“项目显然未被处理”

是不正确的

根据the fine manual“默认情况下,对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);