gpt4 book ai didi

node.js - 如何使用nodejs和kue创建一个排队作业并让它自然退出?

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:38 24 4
gpt4 key购买 nike

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

最佳答案

原因是因为每当连接断开时,底层的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() 多少次,连接始终会打开,直到我中断程序。

关于node.js - 如何使用nodejs和kue创建一个排队作业并让它自然退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23394264/

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