Node-redis: Essayez si le serveur Redis est en cours d'exécution

Créé le 16 oct. 2011  ·  3Commentaires  ·  Source: NodeRedis/node-redis

J'ai un serveur node.js commençant au démarrage avec upstart d'Ubuntu. Étant donné que le serveur node.js démarre avant que Redis ne soit opérationnel, redis.createClient() lève une exception:

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)

Bien sûr, j'essaye de l'envelopper dans une instruction try / catch. Le démarrage de mon serveur:

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

Cependant, cela ne fait aucune différence, j'ai quand même une exception. Quel peut être le cas et comment puis-je m'assurer que mon serveur attend avant que Redis soit là?

question

Commentaire le plus utile

client const = redis.createClient ({
hôte: process.env.redis_hostname,
port: process.env.redis_port
})
client.on ('erreur', (erreur) => {
logger.error (error.message);
})
client.on ('se connecter', () => {
logger.info ('Connexion réussie à redis');
})

image
Donc, cela continuera d'interroger pour se connecter au serveur Redis et quand il trouve une connexion, il se connectera automatiquement. Merci @mranney pour une solution rapide

Tous les 3 commentaires

Cela se produit car le client émet un événement "erreur". Dans le nœud, les événements nommés "erreur" sont spéciaux. Si vous ne les écoutez pas, ils sont convertis en exceptions. Alors obtenez un écouteur pour "erreur" sur votre client, et vous ne planterez pas. Nous réessayons automatiquement lorsque la connexion est refusée, cela devrait donc fonctionner automatiquement une fois que vous avez écouté les erreurs.

Je vais cependant retravailler la façon dont les reconnexions et les erreurs sont gérées, car ce scénario très courant finit par être déroutant pour beaucoup de gens.

Est-ce que tout cela a été traité! J'essaye d'attraper les erreurs dans un bloc try catch. Mais ça ne marche pas.

client const = redis.createClient ({
hôte: process.env.redis_hostname,
port: process.env.redis_port
})
client.on ('erreur', (erreur) => {
logger.error (error.message);
})
client.on ('se connecter', () => {
logger.info ('Connexion réussie à redis');
})

image
Donc, cela continuera d'interroger pour se connecter au serveur Redis et quand il trouve une connexion, il se connectera automatiquement. Merci @mranney pour une solution rapide

Cette page vous a été utile?
0 / 5 - 0 notes