5

私は、Redis pubsub チャネルのサブスクライバーとして無限にリッスンし、着信時にメッセージを処理する Jedis クライアントを作成するという概念に苦労しています。

私の問題は、しばらく非アクティブになった後、サーバーがサイレントに応答を停止することです。これは、サブスクライブしている 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) {
          ...
        }
    }

ありがとう。

4

1 に答える 1

7

うーん、以下はそれをすべて解決します。確かにそれはジェダイのものでした

private AkkaStarter2(){
  //0 specifying no timeout.. Overlooked this 100 times
  sub = new Jedis(REDISHOST, REDISPORT,0); 
  akkaListener = new AkkaListener();
}
于 2011-12-23T21:05:27.103 に答える