NodeJS Bull停止作业上的队列作业失败

时间:2020-05-02 20:05:52

标签: node.js queue job-queue bull.js bull-queue

我的NodeJS项目中有多个Bull队列,如果先前的队列成功执行,这些队列将运行。 我正在尝试在此处验证一些电子邮件地址。

  1. 检查电子邮件格式(formatQueue)

  2. Email Existence使用npm email-existence程序包(existenceQueue)

formatQueue花费的时间更少,可以运行RegEx并验证Email格式。但是email-existence程序包大约需要5到10秒才能完成。

如果formatQueue较少,例如20-100,

existenceQueuejobs可以正常工作。但是当我一次添加超过1000个作业时,existenceQueue失败并出现以下错误

myemail@email.com job stalled more than allowable limit

我检查了问题HEREHERE,我认为该过程花费的时间太长,因此将limiter添加为HERE。但这对我没有帮助。

如果任何队列中的作业失败,则它不处理下一个作业。它将在那里停止,其他作业将保持在waiting状态。

我的代码类似于下面的代码。请帮助我解决这个问题。

Queue.js

var formatQueue = new Queue('format', "redis-db-url");
var existenceQueue = new Queue('existence', "redis-db-url");

// ------------ function for adding to queue ------------
module.exports.addToQueue = (emails) => {
    emails.forEach(element => {
        formatQueue.add(element, { attempts: 3, backoff: 1000 });
    });
}

// ------------ Queue Process -------------

// Format Test Process
formatQueue.process(function(job, done){
    FormatTest.validate(job.data, (err, data) => {
        if(err) done();
        else{
            job.data = data;
            done();
        }
    });
});

// Existence Test Process
formatQueue.process(function(job, done){
    ExistenceTest.validate(job.data, (err, data) => {
        if(err) done();
        else{
            job.data = data;
            done();
        }
    });
});


// ------------ On Cmplete Handlers ------------
formatQueue.on('completed', function(job){
    if(job.data.is_well_format){
        existenceQueue.add(job.data, { attempts: 3, backoff: 1000 });
    }else QueueModel.lastStep(job.data)
});

existenceQueue.on('completed', function(job){
    QueueModel.lastStep(job.data)
});


// ------------ To update the emaile ------------
module.exports.lastStep = (data) => {
    Emails.updateEmail(data, (err, updated) => {
        if(!err) {
            formatQueue.clean('completed');
            existenceQueue.clean('completed');
        }
    })
}

---------更新---------

处理器花费了太多时间来响应,因此自从我使用超时以来,作业变得stalled或失败。

我正尝试在process文档中的不同processor文件itef中运行bull,我添加了以下文件。

// -------- Queue.js ----------

formatQueue.process(__dirname+"/processors/format-worker.js");


// On Cmplete Handler

formatQueue.on('completed', function(job, result){
    console.log(result, "Format-Complete-job"); // result is undefined
    if(job.data.is_well_format){
        existenceQueue.add(job.data, { attempts: 3, backoff: 1000 });
    }else QueueModel.lastStep(job.data)
});

// -------- Queue.js ends ---------

//format-worker.js
Validator = require("../../validators");
module.exports = (job) => {
    Validator.Format.validate(job.data, (data) => {
        job.data = data;
        return Promise.resolve(data);
    });
}

现在我以前使用的Job Complete上完成了,我以前使用更新的Job参数来获取Job数据。现在,我没有更新的工作数据。文档中的第二个参数resultundefined。 现在,在这种情况下,如何获取更新的作业数据。

1 个答案:

答案 0 :(得分:1)

尝试可重复的工作

# Move your snake - You know how to do this, right?
for event in pygame.event.get():
    if event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
        direction = "right"
    # Continue for all four directions