Node-redis: Versuchen Sie, ob der Redis-Server ausgeführt wird

Erstellt am 16. Okt. 2011  ·  3Kommentare  ·  Quelle: NodeRedis/node-redis

Ich habe einen node.js-Server, der beim Booten mit Ubuntus upstart beginnt. Da der node.js-Server gestartet wird, bevor Redis ausgeführt wird, löst redis.createClient() eine Ausnahme aus:

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)

Natürlich versuche ich es in eine try / catch-Anweisung zu packen. Der Start meines Servers:

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

Dies macht jedoch keinen Unterschied, ich habe immer noch eine Ausnahme. Was kann der Fall sein und wie kann ich sicherstellen, dass mein Server wartet, bevor Redis da ist?

question

Hilfreichster Kommentar

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 ('Erfolgreich mit redis verbunden');
})

image
Dies wird also weiterhin abgefragt, um eine Verbindung zum Redis-Server herzustellen, und wenn eine Verbindung gefunden wird, wird automatisch eine Verbindung hergestellt. Vielen Dank an @mranney für eine schnelle Lösung

Alle 3 Kommentare

Dies geschieht, weil der Client ein "Fehler" -Ereignis ausgibt. Im Knoten sind Ereignisse mit dem Namen "Fehler" etwas Besonderes. Wenn Sie nicht auf sie hören, werden sie in Ausnahmen umgewandelt. Holen Sie sich also einen Listener für "Fehler" auf Ihrem Client, und Sie werden nicht abstürzen. Wir versuchen es automatisch erneut, wenn die Verbindung abgelehnt wurde. Dies sollte sich also von selbst einstellen, sobald Sie auf Fehler warten.

Ich werde die Art und Weise, wie Wiederverbindungen und Fehler behandelt werden, überarbeiten, da dieses sehr häufige Szenario für viele Menschen verwirrend ist.

Wurde irgendetwas davon gehandhabt? Ich versuche, die Fehler in einem Try-Catch-Block abzufangen. Aber es funktioniert nicht.

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 ('Erfolgreich mit redis verbunden');
})

image
Dies wird also weiterhin abgefragt, um eine Verbindung zum Redis-Server herzustellen, und wenn eine Verbindung gefunden wird, wird automatisch eine Verbindung hergestellt. Vielen Dank an @mranney für eine schnelle Lösung

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen