你如何使用nodejs&kue创build一个排队的作业,然后自然退出?

使用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 

作业被创build(并单独处理),但生成器进程不会在没有中断信号的情况下退出。

我不希望生产者进程保持资源或连接打开。 我不想听任何事情。 我希望能有一种“消防而忘记”的方法。

kue做这个吗? 怎么样?

谢谢!

编辑:

1:添加:lsof -p显示打开的tcp连接到端口6379(redis服务器)

2:我也尝试在closurescallback中调用job.client.quit()。

原因是因为底层的redis客户端会在连接断开时自动重新连接。

创buildkue队列时,可以通过传递一些redisconfiguration选项来控制这一点:

kue.createQueue({redis:{options:{max_attempts:0}}});

但是,max_attempts必须是1或更大。 如上例所示,零值将被忽略:

https://github.com/mranney/node_redis/blob/master/index.js#L50

所以,正如所写的(在redis客户端中),一旦连接打开,它保持打开状态。 无论我为max_attempts设置了多less次,或者我调用了shutdown()或quit()几次,连接总是处于打开状态,直到中断程序。