jedis pubsub и тайм-ауты: как слушать бесконечно в качестве подписчика?

Я борюсь с концепцией создания клиента Jedis, который бесконечно слушает как подписчик канала Redis pubsub и обрабатывает сообщения, когда они приходят.

Моя проблема в том, что через некоторое время бездействия сервер перестает отвечать молча. Я думаю, что это связано с тайм-аутом, происходящим в клиенте Jedis, на который я подписан.

Возможно ли, что это действительно так? Если да, то есть ли способ настроить этот конкретный Jedis-клиент так, чтобы он не отключался по тайм-ауту? (Хотя на другие джедиспулы не влияет какой-то глобально установленный тайм-аут) В качестве альтернативы, есть ли другой (лучший) способ того, чего я пытаюсь достичь?

Это мой код (измененный/убранный для отображения):

выполняется при запуске веб-сервера:

new Thread(AkkaStarter2.getSingleton()).start();

AkkaStarter2.java

   private Jedis sub;
   private AkkaListener akkaListener;

   public static AkkaStarter2 getSingleton(){
      if(singleton==null){
        singleton = new AkkaStarter2();
      }
      return singleton;
    }

    private AkkaStarter2(){
      sub = new Jedis(REDISHOST, REDISPORT);
      akkaListener = new AkkaListener();
    }

    public void run() {
      //blocking
      sub.psubscribe(akkaListener, AKKAPREFIX + "*");
    }

    class AkkaListener extends JedisPubSub {
        ....
        public void onPMessage(String pattern, String akkaChannel,String jsonSer) {
          ...
        }
    }

Спасибо.


person Geert-Jan    schedule 22.12.2011    source источник


Ответы (1)


ermmm, ниже решает все это. Действительно, это была вещь джедая

private AkkaStarter2(){
  //0 specifying no timeout.. Overlooked this 100 times
  sub = new Jedis(REDISHOST, REDISPORT,0); 
  akkaListener = new AkkaListener();
}
person Geert-Jan    schedule 23.12.2011
comment
Если нет сообщения с сервера, истечет ли время ожидания? Я не вижу никакого пинг-понга в вашем коде. - person Jerry Chin; 26.09.2019