Node-redis: Coba jika server Redis sedang berjalan

Dibuat pada 16 Okt 2011  ·  3Komentar  ·  Sumber: NodeRedis/node-redis

Saya memiliki server node.js yang dimulai saat boot dengan upstart Ubuntu. Karena server node.js dimulai sebelum Redis aktif dan berjalan, redis.createClient() membuat pengecualian:

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)

Tentu saja saya mencoba membungkusnya dengan pernyataan coba / tangkap. Awal server saya:

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
});

Namun, ini tidak ada bedanya, saya masih mendapat pengecualian. Apa masalahnya dan bagaimana cara memastikan server saya menunggu sebelum Redis ada?

question

Komentar yang paling membantu

const client = redis.createClient ({
host: process.env.redis_hostname,
port: process.env.redis_port
})
client.on ('error', (error) => {
logger.error (error.message);
})
client.on ('connect', () => {
logger.info ('Berhasil terhubung ke redis');
})

image
Jadi ini akan terus melakukan polling untuk terhubung ke redis server dan ketika menemukan koneksi maka secara otomatis akan terhubung. Terima kasih @mranney untuk solusi cepat

Semua 3 komentar

Ini terjadi karena klien mengeluarkan peristiwa "kesalahan". Dalam node, event bernama "error" adalah spesial. Jika Anda tidak mendengarkannya, mereka akan diubah menjadi pengecualian. Jadi dapatkan pendengar untuk "kesalahan" pada klien Anda, dan Anda tidak akan mogok. Kami secara otomatis mencoba lagi pada koneksi yang ditolak, jadi ini akan bekerja dengan sendirinya setelah Anda mendeteksi kesalahan.

Saya akan memperbaiki cara koneksi ulang dan kesalahan ditangani, karena skenario yang sangat umum ini akhirnya membingungkan banyak orang.

Apakah semua ini sudah ditangani! Saya mencoba menangkap kesalahan dalam blok coba tangkap. Tapi, itu tidak berhasil.

const client = redis.createClient ({
host: process.env.redis_hostname,
port: process.env.redis_port
})
client.on ('error', (error) => {
logger.error (error.message);
})
client.on ('connect', () => {
logger.info ('Berhasil terhubung ke redis');
})

image
Jadi ini akan terus melakukan polling untuk terhubung ke redis server dan ketika menemukan koneksi maka secara otomatis akan terhubung. Terima kasih @mranney untuk solusi cepat

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

yuany picture yuany  ·  4Komentar

michaelwittig picture michaelwittig  ·  3Komentar

Mickael-van-der-Beek picture Mickael-van-der-Beek  ·  6Komentar

dotSlashLu picture dotSlashLu  ·  5Komentar

shmendo picture shmendo  ·  6Komentar