2011-12-22 23 views
5

Tôi đang gặp khó khăn với khái niệm tạo ra một khách hàng Jedis mà nghe vô hạn như một thuê bao đến một kênh pubsub Redis và xử lý các thông điệp khi họ đến.jedis pubsub và timeouts: cách nghe vô hạn như người đăng ký?

Vấn đề của tôi là sau một thời gian không hoạt động, máy chủ dừng lại đáp lại âm thầm. Tôi nghĩ rằng điều này là do một thời gian chờ xảy ra trên Jedis-client tôi đăng ký với.

Điều này có thực sự là trường hợp không? Nếu vậy, có cách nào để cấu hình Jedis-client cụ thể này không hết thời gian chờ không? (Trong khi các Jedispools khác không bị ảnh hưởng với một số thời gian chờ trên toàn cầu) Ngoài ra, có cách nào khác (thực hành tốt nhất) về những gì tôi đang cố gắng đạt được không?

Đây là mã của tôi, (sửa đổi/tước cho hiển thị):

thực hiện trong web-server khởi động:

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

Cảm ơn.

Trả lời

6

ermmm, bên dưới giải quyết tất cả. Quả thực nó là một điều Jedis

private AkkaStarter2(){ 
    //0 specifying no timeout.. Overlooked this 100 times 
    sub = new Jedis(REDISHOST, REDISPORT,0); 
    akkaListener = new AkkaListener(); 
} 
Các vấn đề liên quan