2011-12-22 14 views
5

Estoy luchando con el concepto de crear un Jedis-cliente, que escucha infinitamente como abonado a un canal pubsub Redis y gestiona los mensajes cuando entran en.jedis pubsub y timeouts: ¿cómo escuchar infinitamente como suscriptor?

Mi problema es que después de un tiempo de inactividad de las paradas del servidor respondiendo en silencio Creo que esto se debe a un tiempo de espera que ocurre en el cliente Jedis con el que me suscribo.

¿Sería este el caso? Si es así, ¿hay alguna forma de configurar este cliente Jedis en particular para que no se exceda? (Mientras que otros Jedispools no se ven afectados con un tiempo de espera establecido globalmente) Alternativamente, ¿hay alguna otra forma (mejor práctica) de lo que estoy tratando de lograr?

Este es mi código, (modificada/despojado de pantalla):

ejecutado durante el inicio del servidor 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) { 
      ... 
     } 
    } 

Gracias.

Respuesta

6

ermmm, a continuación se resuelve todo. De hecho, fue una cosa de Jedis

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