Jedis Pubsub и тайм-ауты: как слушать бесконечно, как подписчик? - PullRequest
5 голосов
/ 23 декабря 2011

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

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

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

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

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

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

Спасибо.

1 Ответ

6 голосов
/ 24 декабря 2011

мммм, ниже решает все это.На самом деле это была вещь джедаев

private AkkaStarter2(){
  //0 specifying no timeout.. Overlooked this 100 times
  sub = new Jedis(REDISHOST, REDISPORT,0); 
  akkaListener = new AkkaListener();
}
...