Node-redis: Redisサーバーが実行されているかどうかを試してください

作成日 2011年10月16日  ·  3コメント  ·  ソース: NodeRedis/node-redis

Ubuntuのupstartで起動時に開始するnode.jsサーバーがあります。 node.jsサーバーはRedisが起動して実行される前に起動するため、 redis.createClient()は例外をスローします。

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Redis connection to 127.0.0.1:6379 failed - ECONNREFUSED, Connection refused
    at Socket.<anonymous> (/var/www/php-jobs/node_modules/redis/index.js:88:28)
    at Socket.emit (events.js:64:17)
    at Array.<anonymous> (net.js:830:27)
    at EventEmitter._tickCallback (node.js:126:26)

もちろん、私はそれをtry / catchステートメントでラップしようとします。 サーバーの起動:

var redis  = require("redis");

function initializeRedis(callback) {
    (function createClient(){
        var client;
        try {
            client = redis.createClient();
        } catch (e) {
            setTimeout(createClient, 1000);
        }
        callback(client);
    })();
};

initializeRedis(function(client) {
  // Do things with client
});

ただし、これは何の違いもありません。それでも例外が発生します。 どのような場合があり、Redisが存在する前にサーバーが待機していることを確認するにはどうすればよいですか?

question

最も参考になるコメント

const client = redis.createClient({
ホスト:process.env.redis_hostname、
ポート:process.env.redis_port
})
client.on( 'error'、(error)=> {
logger.error(error.message);
})
client.on( 'connect'、()=> {
logger.info( 'redisに正常に接続されました');
})

image
したがって、これはredisサーバーに接続するためにポーリングを継続し、接続が見つかると自動的に接続します。 迅速な解決策をありがとう@mranney

全てのコメント3件

これは、クライアントが「エラー」イベントを発行しているために発生しています。 ノードでは、「エラー」という名前のイベントは特別です。 あなたがそれらを聞かない場合、それらは例外に変換されます。 したがって、クライアントで「エラー」のリスナーを取得すれば、クラッシュすることはありません。 接続が拒否された場合は自動的に再試行するため、エラーをリッスンすると自動的に解決するはずです。

ただし、この非常に一般的なシナリオは多くの人を混乱させるため、再接続とエラーの処理方法を作り直します。

これのいずれかが処理されました! trycatchブロックでエラーをキャッチしようとしています。 しかし、それは機能していません。

const client = redis.createClient({
ホスト:process.env.redis_hostname、
ポート:process.env.redis_port
})
client.on( 'error'、(error)=> {
logger.error(error.message);
})
client.on( 'connect'、()=> {
logger.info( 'redisに正常に接続されました');
})

image
したがって、これはredisサーバーに接続するためにポーリングを継続し、接続が見つかると自動的に接続します。 迅速な解決策をありがとう@mranney

このページは役に立ちましたか?
0 / 5 - 0 評価