3

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

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();
        }
4

1 回答 1

4

传递给的函数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);
于 2017-04-28T09:32:47.113 回答