如何使用nodejs&创建排队作业? kue并让它自然退出?

时间:2014-04-30 17:18:02

标签: node.js kue

使用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()。

1 个答案:

答案 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()多少次,在我中断程序之前,连接始终处于打开状态。