我有一個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