Node-redis: No reconectarse

Creado en 9 mar. 2019  ·  6Comentarios  ·  Fuente: NodeRedis/node-redis

Oye,
No puedo hacer que este módulo vuelva a conectar redis.

Tomando esta configuración:

  const client = redis.createClient({
    no_ready_check: false,
    enable_offline_queue: true,
    retry_unfulfilled_commands: true,
    socket_keepalive: true,
    retry_strategy: function (options) {
      if (options.error && options.error.code === 'ECONNREFUSED') {
        // End reconnecting on a specific error and flush all commands with
        // a individual error
        return new Error('The server refused the connection');
      }
      if (options.total_retry_time > 1000 * 60 * 60) {
        // End reconnecting after a specific timeout and flush all commands
        // with a individual error
        return new Error('Retry time exhausted');
      }
      if (options.attempt > 10) {
        // End reconnecting with built in error
        return undefined;
      }
      console.log('here');
      // reconnect after
      return 100;
    },
    host: process.env.REDIS_HOST || '127.0.0.1',
    port: 6379
  });

Veo el here cuando detengo mi redis local, pero luego lo reinicio de nuevo y espero cualquier cantidad de tiempo, cualquier llamada subsiguiente a redis me da:

{ AbortError: EXEC can't be processed. The connection is already closed.
    at handle_offline_command (/Users/kstoney/git/autotrader/platform-alert-forwarder/node_modules/redis/index.js:851:15)
    at RedisClient.internal_send_command (/Users/kstoney/git/autotrader/platform-alert-forwarder/node_modules/redis/index.js:885:9)
    at Multi.exec_transaction (/Users/kstoney/git/autotrader/platform-alert-forwarder/node_modules/redis/lib/multi.js:115:18)
    at Object.RedisCache.self.set (/Users/kstoney/git/autotrader/platform-alert-forwarder/lib/caches/redis.js:41:8)
    at Object.sendMessage [as handle] (/Users/kstoney/git/autotrader/platform-alert-forwarder/lib/forwarders/slack.js:197:28)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
  command: 'EXEC',
  code: 'NR_CLOSED',
  errors:
   [ { AbortError: SET can't be processed. The connection is already closed.

¿Algunas ideas? Necesito algo de tolerancia a los blips de Redis.

question

Comentario más útil

Sí, cambiamos a ioredis jaja

Todos 6 comentarios

El mismo problema sin algunas opciones como la cola fuera de línea, mi configuración es la siguiente:

var client = redis.createClient({
    port: process.env.REDIS_PORT,
    host: process.env.REDIS_HOST,
    retry_strategy: function (options) {
        if (options.error && options.error.code === 'ECONNREFUSED') {
            // End reconnecting on a specific error and flush all commands with
            // a individual error
            logger.debug('[Redis Strategy] - Connection Refused options:', options);
            return new Error('The server refused the connection');
        }
        if (options.total_retry_time > 1000 * 60 * 60) {
            // End reconnecting after a specific timeout and flush all commands
            // with a individual error
            logger.debug('[Redis Strategy] - Time exhausted options:', options);
            return new Error('Retry time exhausted');
        }
        if (options.attempt > 10) {
            // End reconnecting with built in error
            return undefined;
        }
        // reconnect after
        return Math.min(options.attempt * 100, 3000);
    }
});

client.on('connect', function () {
    console.log('Redis client connected');
});

client.on('error', function (err) {
    console.log('Something went wrong ' + err);
});

Vaya, no puedo creer que no haya notado este comportamiento.
Ejecuto mis aplicaciones con https://github.com/Unitech/pm2 , que reinicia la aplicación cada vez que ocurre una falla, por lo que esto ha pasado bastante tiempo sin ser notado.

¡Gran captura!

¿Hay otra forma de lograr la reconexión hasta que se solucione? (Veo que la última versión es de hace 2 años)

Sí, cambiamos a ioredis jaja

@Stono , estoy de acuerdo, me cambiaré a

Gracias, realmente suena mejor, no estaba familiarizado con esta biblioteca.
Sin duda alguna para este proyecto actual no podré cambiar, pero es bueno saberlo para el trabajo futuro.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

aletorrado picture aletorrado  ·  6Comentarios

michaelwittig picture michaelwittig  ·  3Comentarios

ghost picture ghost  ·  3Comentarios

shmendo picture shmendo  ·  6Comentarios

Atala picture Atala  ·  3Comentarios