运维开发网

jedis pubsub和超时:如何作为订阅者无限地倾听?

运维开发网 https://www.qedev.com 2020-06-09 13:30 出处:网络 作者:运维开发网整理
我正在努力创建一个Jedis-client的概念,它作为Redis pubsub频道的订阅者无限地监听并在它们进入时处理消息. 我的问题是,在一段时间不活动后,服务器会以静默方式停止响应.我认为这是由于我订阅的Jedis客户端发生超时. 这可能确实如此吗?如果是这样,有没有办法配置这个特定的Jedis客户端不超时? (而其他Jedispools不会受到某些全局设置超时的影响) 或者,是否有另一种(
我正在努力创建一个Jedis-client的概念,它作为Redis pubsub频道的订阅者无限地监听并在它们进入时处理消息.

我的问题是,在一段时间不活动后,服务器会以静默方式停止响应.我认为这是由于我订阅的Jedis客户端发生超时.

这可能确实如此吗?如果是这样,有没有办法配置这个特定的Jedis客户端不超时? (而其他Jedispools不会受到某些全局设置超时的影响)

或者,是否有另一种(最佳实践)方式来实现我想要实现的目标?

这是我的代码,(修改/剥离显示):

在Web服务器启动期间执行:

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

谢谢.

嗯,以下解决了这一切.确实这是一个绝世的事情

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

精彩评论

暂无评论...
验证码 换一张
取 消