如何在node-resque中重复使用连接?

4

我正在按照文档中描述的方式使用node-resque API。每次执行enqueue操作时,都会创建一个新的客户端连接(通过CLIENT LIST确认)。为什么不能只使用一个连接来完成所有操作呢?

// Initialize in the beginning and making queue globally accessible
var queue = new NR.queue({connection: connectionDetails}, jobs);
queue.on('error', function(error){ console.log(error); });

// calling this multiple times
queue.connect(function(){
  queue.enqueue('math', "add", [1,2]);
  queue.enqueue('math', "add", [1,2]);
  queue.enqueue('math', "add", [2,3]);
  queue.enqueueIn(3000, 'math', "subtract", [2,1]);
});

我是否在错误地使用 API,还是 API 本身有缺陷?您会期望在 connect 块结束时它会再次关闭连接。

你解决这个问题了吗?我一直面临着同样的问题。 - kalin
1个回答

1
“connect”函数不会关闭,除非你手动关闭它。但是你可以在连接回调之外连接一次,然后再排队。没有必要多次调用connect函数,你只需要确保在添加作业之前建立连接即可。这种方法不会产生新的Redis连接。
var connected = false;
queue.connect(function() {
    connected = true;
});

function addJobToQueue(job) {
    if (connected) {
        queue.enqueue(job[0], job[1], job[2]);
    } else {
        setTimeout(addJobToQueue.bind(null, job), 100);
    }
}

addJobToQueue(['math', "add", [1, 2]]);
addJobToQueue(['math', "add", [2, 2]]);
addJobToQueue(['math', "add", [3, 2]]);
//..etc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接