原因:

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

解决方法:

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

可防止此错误发生.

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

[java] view
plain
copy

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

zookeeper错误KeeperErrorCode = ConnectionLoss解决的更多相关文章

  1. zookeeper客户端KeeperErrorCode = ConnectionLoss异常问题排查历险记

    经过线报,说前方应用有异常,导致了可用性变差.咦!讨厌的异常,抛异常是程序猿最讨厌的事情之一. 经过收集异常信息如下 ​ ​ 2019-06-24 10:57:41.806 ERROR [hades- ...

  2. org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /eclipse20171118

    1:如果有一天,你有幸看到了这个错误,也许你像我一样low,因为此时,你已经准备开发Zookeeper程序了,却还没有把Zookeeper的服务启动起来. org.apache.zookeeper.K ...

  3. java连接zookeeper服务器出现“KeeperErrorCode = ConnectionLoss for /test”

    昨天调试java连接zookeeper服务器,zookeeper搭建过程在这里不做赘述,在创建连接后,然后操作节点一直报异常 错误信息如下: Exception in thread "mai ...

  4. alimama open source mdrill启动后访问蓝鲸任务时出错:Caused by:org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss

    启动后,访问:http://IP:1107/mdrill.jsp  蓝鲸任务

  5. java连接zookeeper服务器出现“KeeperErrorCode = ConnectionLoss for ...”

    错误信息如下: Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossExce ...

  6. zk的KeeperErrorCode = ConnectionLoss错误

    额,这东西都快把人搞崩溃了,各种排查各种正常. 最后竟然是因为我在客户端未连接上zkserver的时候就进行了create操作造成的错误. 噗, Exception in thread "m ...

  7. keepererrorcode = connectionloss for 错误处理

    自己的环境在虚拟机上,于是使用同事的环境调试问题,发现无法初始化成功,提示keepererrorcode = connectionloss for,于是上网查了下资料整理如下: 1.对比代码中引用的j ...

  8. coreseek常见错误原因及解决方法

    coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和 ...

  9. AndroidStudio错误总结及解决(待续)

    AndroidStudio错误总结及解决 一. 当安装好AndroidStudio开启的时候出现如下错误: 百度的解决方法: 1)进入刚安装的Android Studio目录下的bin目录.找到ide ...

随机推荐

  1. 136 - Ugly Numbers

     Ugly Numbers  Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3 ...

  2. [Cocos2d-x]CCSpriteFrameCache的使用

    文档: http://cocos2d.cocoachina.com/document/index/class?url=dc/dda/classcocos2d_1_1_c_c_sprite_frame_ ...

  3. HDU 3277Marriage Match III(二分+并查集+拆点+网络流之最大流)

    题目地址:HDU 3277 这题跟这题的上一版建图方法差点儿相同,仅仅只是须要拆点.这个点拆的也非常巧妙,既限制了流量,还仅仅限制了一部分,曾经一直以为拆点会所有限制,原来也能够用来分开限制,学习了. ...

  4. VLC笔记 它 立志

    不过,别忘了找工作的时候毕业,我说:"至少不会操心你会饿死了". 直到刚刚我才认为我妈有点过于乐观了. 今天下午,在做vlc如今播放器部分,一堆代码看的我头大. 正在此时,boss ...

  5. c#程序内存分配

    c#程序内存分配 进程可使用内存数就是操作系统给进程分配的最大地址,一般的32位操作系统提供给用户地址最大都是3g(操作系统自己保留1g),windows由于商业目的,对于个人用户只提供了2g地址,要 ...

  6. linq 中执行方法

    Database1Entities db = new Database1Entities(); protected void Page_Load(object sender, EventArgs e) ...

  7. hdu 1251 字典树模板题 ---多串 查找单词出现次数

    这道题题目里没有给定数据范围 我开了2005  疯狂的WA 然后开了50000, A掉  我以为自己模板理解错  然后一天没吃饭,饿得胃疼还是想着把这题A掉再去吃,谁知竟然是这样的问题,,,呵呵~~~ ...

  8. 最简单的Java框架

    框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它 ...

  9. vim ctl+v批量添加/删除

    vim编辑器---批量注释与反注释 在使用vim编写代码的时候,经常需要用到批量注释与反注释一段代码.下面简要介绍其操作. 方法一 块选择模式 插入注释: 用v进入virtual模式 用上下键选中需要 ...

  10. OCP读书笔记(20) - 复制数据库

    没有连接到target的复制 将orcl数据库的备份复制为orcl1 一.创建orcl的备份: run{ backup database plus archivelog;} 二.复制数据库为orcl1 ...