Redis
 sql >> Database >  >> NoSQL >> Redis

Redis (ioredis) - Impossibile rilevare l'errore di connessione per gestirli con garbo

Gli errori di connessione vengono segnalati come un error evento sul client Redis oggetto.

Secondo la sezione "Riconnessione automatica" dei documenti, ioredis proverà automaticamente a riconnettersi quando la connessione a Redis viene persa (o, presumibilmente, non può essere stabilita in primo luogo). Solo dopo maxRetriesPerRequest tentativi i comandi in sospeso "verranno cancellati con un errore", ovvero arriveranno al catch qui:

  try {
    cachedItem = await redisClient.get(queryString); // This emit an error on the redis client, because it fails to connect (that's intended, to test the behaviour)
  } catch (e) {
    logger.error(e); // It never goes there, as the error isn't "thrown", but rather "emitted" and handled by redis its own way
    epsagon.setError(e);
  }

Poiché interrompi il programma al primo errore:

  client.on('error', function (e) {
    // ...
    if (e.message === 'ERR invalid password') {
      logger.error(`Fatal error occurred "${e.message}". Stopping server.`);
      throw e; // Fatal error, don't attempt to fix

...i tentativi e il successivo "cancellazione con errore" non hanno mai la possibilità di essere eseguiti.

Ignora gli errori in client.on('error' e dovresti ricevere l'errore restituito da await redisClient.get() .