使用nodejs和kue,我想将一个长时间运行的作业插入队列并忘记它。工人将处理所有细节。
简短的例子:
(function(){
var kue = require('kue');
var jobs = kue.createQueue();
var job = jobs.create('email', {
foo: "bar"
}).save(function(err){
console.log("saved");
jobs.shutdown( function(err){
console.log("shutting down");
},0);
});
}());
// DOES NOT EXIT
创建(并单独处理)作业,但生成器进程在没有中断信号的情况下不会退出。
我不希望生产者进程保持资源或连接打开。我不想听工作事件。我希望采用“火与忘”的方法。
kue这样做吗?怎么样?
谢谢!
编辑:
1:添加:lsof -p显示到端口6379(redis服务器)的打开tcp连接
2:我也尝试在关机回调中调用job.client.quit()。
答案 0 :(得分:0)
原因是因为只要连接断开,底层的redis客户端就会自动重新连接。
您可以在创建kue队列时传递一些redis配置选项来控制这一点:
kue.createQueue({redis:{options:{max_attempts:0}}});
但是,max_attempts必须为1或更大。如上例所示,值为零将被忽略:
https://github.com/mranney/node_redis/blob/master/index.js#L50
因此,在写入(在redis客户端中)时,一旦打开连接,它就会保持打开状态。无论我为max_attempts设置了什么,或者我调用了shutdown()或quit()多少次,在我中断程序之前,连接始终处于打开状态。