es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ioredis: Al reconectar redis a través de connect(), llamar a connect() no restablece los intentos de reintentos a 0.

Tengo las siguientes opciones configuradas al conectarme a Redis:

var client = new Redis({
  port: 63xx, // Puerto de Redis
  host: REDISHOST, // Anfitrión de Redis
  family: 4, // 4 (IPv4) o 6 (IPv6)
  db: 0,
  lazyConnect: true,
  // Milisegundos antes de que ocurra un tiempo de espera durante la conexión inicial al servidor Redis.
  connectTimeout: 3000,

retryStrategy: function (times) {

if (times > 3) {
  logger.error("redisRetryError", 'El reintentar la conexión a Redis se agotó después de 3 intentos.');
  return null;
}

return 200;


}

}); 

Más tarde, exporto este cliente en todo el proyecto para consultas de Redis. El problema es que cuando llega la petición 1 y hay algún problema con Redis, intenta conectarse automáticamente 4 veces (+1 para el primer intento). Luego, lanza un error que se maneja. Por lo tanto, en este momento, la variable de veces (usada en retrystrategy ()) tendrá un valor de 4.

La próxima vez que llega la petición 2 y vemos que Redis está desconectado, nos reconectamos utilizando el método client.connect():
“`
static async getData(key) {

try {

    // Si la conexión finalizó, intentamos reconectarnos.
    if (client.status === 'end') {
        await logger.warning(`reconnectingRedis`, 'Redis no está conectado. ¡Intentando reconectar con Redis!');
        await client.connect();
    }

    let output = await client.get(key);

    return JSON.parse(output);

} catch (error) {
    ApiError.throw(error, errorCode.REDIS_GET_ERROR_CODE);
}

}

Esta vez, Redis intenta reconectarse pero no reinicia la variable de veces utilizada en retrystrategy(), lo que significa que esta variable ahora tiene 5. Y si este intento también falla, retrystrategy() simplemente lanza un error porque times > 3.

Entonces, efectivamente, la petición 1 obtiene 4 intentos y la petición 2 solo obtiene 1.

¿Cómo puedo solucionar esto para que la petición 2 también obtenga 4 intentos?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puedes solucionar esto restableciendo la variable times en la función retryStrategy. Puedes hacerlo agregando la instrucción times = 0 al principio de la función. Esto asegurará que cada solicitud tendrá 4 intentos de reintentar.

    retryStrategy: function (times) {
      times = 0; // Restablecer la variable times
      if (times > 3) {
        logger.error("redisRetryError", 'Redis reconexión agotada después de 3 reintentos.');
        return null;
      }
    
      return 200;
    }
    

Comments are closed.