博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zookeeper错误KeeperErrorCode = ConnectionLoss解决
阅读量:4112 次
发布时间:2019-05-25

本文共 2436 字,大约阅读时间需要 8 分钟。

原因:

一般是由于连接还未完成就执行zookeeper的get/create/exsit操作引起的.

解决方法:

利用"CountDownLatch 类 + zookeeper的watcher + zookeeper的getStat" 实现连接完成后再调用.

可防止此错误发生.

示例类如下(为一配置获取类):

[java] 
  1. import java.util.concurrent.CountDownLatch;  
  2.   
  3.   
  4. import org.apache.zookeeper.WatchedEvent;  
  5. import org.apache.zookeeper.Watcher;  
  6. import org.apache.zookeeper.Watcher.Event.KeeperState;  
  7. import org.apache.zookeeper.ZooKeeper;  
  8. import org.apache.zookeeper.ZooKeeper.States;  
  9. import org.apache.zookeeper.data.Stat;  
  10. public class Conf{  
  11.     public static void waitUntilConnected(ZooKeeper zooKeeper, CountDownLatch connectedLatch) {  
  12.         if (States.CONNECTING == zooKeeper.getState()) {  
  13.             try {  
  14.                 connectedLatch.await();  
  15.             } catch (InterruptedException e) {  
  16.                 throw new IllegalStateException(e);  
  17.             }  
  18.         }  
  19.     }  
  20.    
  21.     static class ConnectedWatcher implements Watcher {  
  22.    
  23.         private CountDownLatch connectedLatch;  
  24.    
  25.         ConnectedWatcher(CountDownLatch connectedLatch) {  
  26.             this.connectedLatch = connectedLatch;  
  27.         }  
  28.    
  29.         @Override  
  30.         public void process(WatchedEvent event) {  
  31.            if (event.getState() == KeeperState.SyncConnected) {  
  32.                connectedLatch.countDown();  
  33.            }  
  34.         }  
  35.     }  
  36.     static public Conf Instance(){  
  37.         if(static_ == null){  
  38.             static_ = new Conf();  
  39.         }  
  40.         return static_;  
  41.     }  
  42.     public boolean Init(String hostports, int times){  
  43.         try{  
  44.             CountDownLatch connectedLatch = new CountDownLatch(1);  
  45.             Watcher watcher = new ConnectedWatcher(connectedLatch);  
  46.             zk_ = new ZooKeeper(hostports, times, watcher);  
  47.             waitUntilConnected(zk_, connectedLatch);  
  48.         }  
  49.         catch(Exception e){  
  50.             System.out.println(e);  
  51.             return false;  
  52.         }  
  53.         return true;  
  54.     }  
  55.     public String Get(String keys){  
  56.         String re = "";  
  57.         String ppath = "/zookeeper";  
  58.         int oldpos = -1;  
  59.         int pos = 0;  
  60.         while(true){  
  61.             pos = keys.indexOf(".", oldpos + 1);  
  62.             if(pos < 0){  
  63.                 ppath += "/";  
  64.                 String str = keys.substring(oldpos + 1);  
  65.                 ppath += str;  
  66.                 break;  
  67.             }  
  68.             ppath += "/";  
  69.             String str = keys.substring(oldpos + 1,  pos);  
  70.             ppath += str;  
  71.             oldpos = pos;  
  72.         }  
  73.         Stat stat = new Stat();  
  74.         try{  
  75.             byte[] b = zk_.getData(ppath, false, stat);    //获取节点的信息及存储的数据  
  76.             re = new String(b);  
  77.         }  
  78.         catch(Exception e){  
  79.             System.out.println(e);  
  80.         }  
  81.         return re;  
  82.     }  
  83.     private Conf(){  
  84.           
  85.     }  
  86.     private ZooKeeper zk_;  
  87.     static private Conf static_;  
  88.     public static void main(String args[]){  
  89.         String hostports = "192.168.1.88:2181,192.168.1.88:2182,192.168.1.88:2183";  
  90.           
  91.         Conf.Instance().Init(hostports, 1000);  
  92.           
  93.         String str = Conf.Instance().Get("conf.logicpoint.subscriberserverip");  
  94.         str = Conf.Instance().Get("conf.logicpoint.subscriberserverport");  
  95.         System.out.println(str);  
  96.         while(true){  
  97.             try{Thread.sleep(100);}  
  98.             catch(Exception e){  
  99.                   
  100.             }  
  101.         }  
  102.           
  103.     }  
  104. }  

转载地址:http://wdrsi.baihongyu.com/

你可能感兴趣的文章
web.py 0.3 新手指南 - RESTful doctesting using app.request
查看>>
web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
查看>>
web.py 0.3 新手指南 - 多数据库使用
查看>>
一步步开发 Spring MVC 应用
查看>>
python: extend (扩展) 与 append (追加) 的差别
查看>>
「译」在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢?...
查看>>
谷歌阅读器将于2013年7月1日停止服务,博客订阅转移到邮箱
查看>>
浅谈JavaScript的语言特性
查看>>
LeetCode第39题思悟——组合总和(combination-sum)
查看>>
LeetCode第43题思悟——字符串相乘(multiply-strings)
查看>>
LeetCode第44题思悟——通配符匹配(wildcard-matching)
查看>>
LeetCode第45题思悟——跳跃游戏(jump-game-ii)
查看>>
LeetCode第46题思悟——全排列(permutations)
查看>>
LeetCode第47题思悟—— 全排列 II(permutations-ii)
查看>>
LeetCode第48题思悟——旋转图像(rotate-image)
查看>>
驱动力3.0,动力全开~
查看>>
记CSDN访问量10万+
查看>>
Linux下Oracle数据库账户被锁:the account is locked问题的解决
查看>>
记CSDN访问20万+
查看>>
Windows 环境下Webstorm 2020.3 版本在右下角找不到Git分支切换部件的一种解决方法
查看>>