gpt4 book ai didi

node.js - 使用 NodeJS Bull Queue 独立处理器

转载 作者:行者123 更新时间:2023-12-04 17:28:35 26 4
gpt4 key购买 nike

我正在尝试在不同的处理器文件中运行进程,就像它在bull中一样documentation ,我添加了如下文件。

// -------- 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 上,我曾经使用更新的作业参数获取作业数据。现在我没有得到更新的工作数据。文档中的第二个参数即 resultundefined。现在,在这种情况下,我该如何获取更新后的工作数据。

jobprocessors 工作正常,我按如下方式运行 process

formatQueue.process(function(job, done){
Validator.Format.validate(job.data, (data) => {
job.data = data;
done();
});
});

在这种情况下,工作数据本身正在更新并且也有效。

我有多个队列在做不同的工作,一旦前一个工作成功完成,那么我只需要另一个工作就可以开始工作。我还有一个问题,我已经在那里提到了用例。 please check it here .

最佳答案

让我帮你,也给你一些提示。首先,您的代码中存在一些错误。流程函数不返回您在验证回调中创建的 promise 。现在,我不知道 Validator.Format.validate 返回什么,所以为了安全起见,我会这样写:

module.exports = job => {
return new Promise(resolve => {
Validator.Format.validate(job.data, data => {
resolve(data);
});
});
};

其次,一般来说,在进程处理程序本身中添加下一个作业比在“完成”事件回调中添加下一个作业更健壮,原因是这样做您将获得更健壮的解决方案,在这种情况下添加下一个作业由于某种原因失败,该作业将失败,您将能够重试或检查它失败的原因等等。

module.exports = (job) => {
return new Promise(resolve => {
Validator.Format.validate(job.data, (data) => {
if(data.is_well_format){
resolve(existenceQueue.add(data, { attempts: 3, backoff: 1000 }));
}else {
resolve(QueueModel.lastStep(data))
}
});
}
});

关于node.js - 使用 NodeJS Bull Queue 独立处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61786093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com