Node-redis: Sem reconexão

Criado em 9 mar. 2019  ·  6Comentários  ·  Fonte: NodeRedis/node-redis

Ei,
Não consigo fazer com que este módulo reconecte o redis.

Tomando esta configuração:

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

Eu vejo here quando eu paro meu redis local, mas então eu reinicio-o novamente e espero qualquer quantidade de tempo, quaisquer chamadas de redis subsequentes me dão:

{ 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.

Alguma ideia? Eu preciso de alguma tolerância para redis blips.

question

Comentários muito úteis

Sim, mudamos para ioredis haha

Todos 6 comentários

Mesmo problema sem algumas opções como fila offline, minha configuração é esta abaixo:

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

Uau, não acredito que não percebi esse comportamento.
Eu executo meus aplicativos com https://github.com/Unitech/pm2 , que reinicia o aplicativo sempre que ocorre uma falha, então isso passou algum tempo despercebido.

Grande captura!

Existe outra maneira de realizar a reconexão até que seja consertada? (Vejo que a versão mais recente é de 2 anos atrás)

Sim, mudamos para ioredis haha

@Stono eu concordo, estou mudando para o ioredis hoje. Ele está sendo atualizado com mais frequência, tem mais recursos e é mais rápido.

Obrigado, realmente soa melhor, eu não estava familiarizado com esta biblioteca.
Unfourtantley para este projeto atual não poderei mudar, mas é bom saber para trabalhos futuros.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

shmendo picture shmendo  ·  6Comentários

betimer picture betimer  ·  5Comentários

aletorrado picture aletorrado  ·  6Comentários

lemon707 picture lemon707  ·  3Comentários

Mickael-van-der-Beek picture Mickael-van-der-Beek  ·  6Comentários