2011-12-22 5 views
5

मैं एक Jedis-ग्राहक जो एक Redis pubsub चैनल के लिए एक ग्राहक के रूप में असीम सुनता है और संदेशों को संभालती है, जब वे में आते हैं बनाने की अवधारणा के साथ संघर्ष कर रहा हूँ।जेडीस पबब और टाइमआउट्स: ग्राहक के रूप में असीम रूप से कैसे सुनें?

मेरे समस्या यह है कि निष्क्रियता के सर्वर बंद हो जाता है कुछ समय के बाद चुपचाप जवाब देना। मुझे लगता है कि यह जेडिस-क्लाइंट पर होने वाले समय-समय पर होने वाली टाइमआउट के कारण है।

क्या यह वास्तव में मामला होगा? यदि हां, तो क्या इस विशेष जेडिस-क्लाइंट को टाइमआउट पर कॉन्फ़िगर करने का कोई तरीका नहीं है? (जबकि अन्य जेडिसपूल कुछ विश्व स्तर पर सेट टाइमआउट से प्रभावित नहीं हैं) वैकल्पिक रूप से, क्या मैं एक और (सर्वोत्तम अभ्यास) तरीका प्राप्त करने की कोशिश कर रहा हूं?

यह मेरा कोड, है (संशोधित/प्रदर्शन के लिए छीन लिया):

वेब सर्वर स्टार्टअप के दौरान मार डाला:

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

धन्यवाद।

उत्तर

6

ermmm, नीचे यह सब हल करता है। दरअसल यह एक जेडीस चीज थी

private AkkaStarter2(){ 
    //0 specifying no timeout.. Overlooked this 100 times 
    sub = new Jedis(REDISHOST, REDISPORT,0); 
    akkaListener = new AkkaListener(); 
} 
संबंधित मुद्दे