gpt4 book ai didi

javascript - sailsjs 中的公牛任务不起作用?

转载 作者:行者123 更新时间:2023-11-30 20:50:10 27 4
gpt4 key购买 nike

好吧,我(天真地)试图让 bull 在 sails 应用程序中工作:最终我希望有一个队列,我可以根据传入路线向其中添加/删除/检查任务。

现在,据我所知,要创建一个可在全局范围内运行的排队系统,我必须在 bootstrap.js 中添加此设置。

/**
* Bootstrap
* (sails.config.bootstrap)
*
* An asynchronous bootstrap function that runs before your Sails app gets lifted.
* This gives you an opportunity to set up your data model, run jobs, or perform some special logic.
*
* For more information on bootstrapping your app, check out:
* https://sailsjs.com/config/bootstrap
*/
module.exports.bootstrap = function(done) {

// It's very important to trigger this callback method when you are finished
// with the bootstrap! (otherwise your server will never lift, since it's waiting on the bootstrap)
let Queue = require('bull');
let q = new Queue('test queue');
q.process(function(job, done){
console.log("starting job");
for(let i = 0; i<job.value; i+=1) {
console.log(i);
}
done();
});
q.add({'value':10});
global.DirectUpdateQueue = q;
return done();

};

根据上面的代码,sails 可以完美启动,并且在 route 我可以看到 global.DirectUpdateQueue 存在。

然而不起作用的是排队的任务被执行。 - 我在控制台中没有看到任何日志(至少应该是“开始工作”)。当我在处理函数中放置断点时,代码也不会中断。

那么这里发生了什么?

编辑:这可能是因为我没有设置(本地)redis 服务器吗? - 我没有找到关于这个主题的任何信息,但我希望/希望 bull.js 在内部实际处理这个服务器,并且(更重要的是)不限于特定的(操作系统)环境。

最佳答案

因此,首先,您必须确保您的服务器上安装了 Redis。创建队列时,您可以在我下面的示例中传递 Redis 配置,这是默认设置。

然后在 bootsrap.js 中:

  var Queue = require('bull');
var testQueue = new Queue('Website Queue', 'redis://127.0.0.1:6379');
testQueue.process(function(job, done){

console.log('job started');

setTimeout(function () {

console.log('10 seconds later');
console.log(job.data);

}, 10000)

done();
});

global.testQueue = testQueue;

然后从 Action / Controller 你可以这样做:

testQueue.add({'value':10}); 

关于javascript - sailsjs 中的公牛任务不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48266274/

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