我正在努力创建一个Jedis客户端的概念,该客户端可以作为Redis pubsub channel 的订阅者进行无限监听,并在消息进入时对其进行处理。

我的问题是,经过一段时间不事件后,服务器停止了静默响应。我认为这是由于我订阅的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) {
          ...
        }
    }

谢谢。

最佳答案

ermmm,以下内容可以解决所有问题。确实这是杰迪斯的事

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

关于timeout - jedis pubsub和超时: how to listen infinitely as subscriber?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8609491/

10-11 06:47