私は、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) {
...
}
}
ありがとう。