我有一个node.js脚本,它在启动时启动。它使用node-redis为Redis创建客户端,但在引导时,Redis尚未准备好,而节点已经启动。所以,它会发出异常并停止执行。Node.js脚本应该在服务运行之前等待
第一部分看起来像这样:
var redis = require("redis"),
jobs = require("jobs"),
client = redis.createClient(),
runner = new jobs(client, "job-queue",{});
// Continue using runner
该异常是在第3行(redis.createClient()
)抛出。
我的解决办法是让一个死循环,在一个try/catch创建客户端和成功时,停止循环:
var redis = require("redis"),
jobs = require("jobs"),
queue = 'job-queue',
client = null,
runner = null,
createClient = function (redis, jobs, queue) {
try {
client = redis.createClient();
return new jobs(client, queue, {});
} catch (err) {
return null;
}
};
while(true) {
setTimeout(function() {
runner = createClient(redis, jobs, queue);
}, 1000);
if (null !== runner) break;
}
// Continue using runner
几秒钟后,这是输出:
FATAL ERROR: JS Allocation failed - process out of memory
我该如何解决这个问题?我正在寻找这可能是在PHP的解决方案:
while (true) {
$client = createClient($redis, $jobs, $queue);
if ($client instanceof MyClient) break;
else sleep(1);
}
如果两个启动服务有依存关系,做easyest的事情是确保在正确的顺序启动,我猜。 – Slartibartfast