redis.clients.jedis.exceptions.JedisException: не удалось вернуть ресурс в пул

1

Я получаю ошибку при попытке вернуть ресурсы из jedis pool. Код выглядит следующим образом.

Jedis publisherJedis = jedispool.getResource();
if(!redisPassword.equals(""))
    publisherJedis.auth(redisPassword);
publisherJedis.publish(channel,data);
log.debug("Publisher jedis is connected: " + publisherJedis.isConnected());
log.debug("Jsondata is added into the queue " + data);
try {
    jedispool.returnResource(publisherJedis);
    jedispool.destroy();
    publisherJedis.close();
} catch (Exception e) {
    e.printStackTrace();
    log.error("Exception occured in returing resource " + e);
}
Теги:
multithreading
jedis

1 ответ

2
Лучший ответ

Я закрывал клиент redis в другом месте приложения, поэтому, когда я собирался закрыть redis-клиент, он бросал исключение. Также я заметил, что мы должны быть более осторожными при использовании клиента redis. Если мы получим ресурс из пула redis, нам также придется отключить их после его использования. Если мы этого не сделаем, клиент будет увеличиваться, и после достижения предела maxSizeClient он также будет генерировать исключение. Я внес изменения в метод запуска издателя.

public void start(JedisPool jedispool, Jedis publisherJedis, String channel,String data, String redisPassword)
{
    if(!redisPassword.equals(""))
        publisherJedis.auth(redisPassword);
    publisherJedis.publish(channel,data);
    log.debug("Jsondata is added into the queue " +data);
    try{
        publisherJedis.close();
        log.debug(" Is Jedis connected " +publisherJedis.isConnected());
        if(publisherJedis.isConnected())
            publisherJedis.disconnect();
        log.debug(" After disconnecting: is redis connected  " +publisherJedis.isConnected());
    }catch(Exception e){
        log.debug("Error occured " +e);
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню