原因:

一般是由于连接还未完成就执行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. Codeforces Round #350 (Div. 2)解题报告

    codeforces 670A. Holidays 题目链接: http://codeforces.com/contest/670/problem/A 题意: A. Holidays On the p ...

  2. PHP网站安装程序的原理及代码

    原文:PHP网站安装程序的原理及代码 原理: 其实PHP程序的安装原理无非就是将数据库结构和内容导入到相应的数据库中,从这个过程中重新配置连接数据库的参数和文件,为了保证不被别人恶意使用安装文件,当安 ...

  3. Java使用Socket传输文件遇到的问题(转)

    1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...

  4. hdu3068之manacher算法+详解

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. Struts2 拦截器具体配置过程

    拦截器差点儿遍布每个程序中,所以贴出拦截器配置的具体过程,希望可以帮到大家. Struts2 拦截器具体配置过程 <interceptors> <!-- 先定义拦截器 --> ...

  6. Codeforces 164 E Compatible Numbers

    主题链接~~> 做题情绪:好题,做拉的比赛的时候想了非常久,想到枚举变幻某一位的 0 为 1 .可是每一个数都这样枚举岂不超时的节奏,当时没想到事实上从大到小枚举一次就 ok 了. 解题思路: ...

  7. C#List<long>与String(Linq)

    1.string => List<long> string ShopIds = "1,2,3"; var ShopIdList = ShopIds.Split(' ...

  8. 6 款好用的 PC+Android 同步 GTD 软件

    6 款好用的 PC+Android 同步 GTD 软件 最近老鼠工作积极性比较高(其实只要是买平板电脑的欲望在鼓舞着干劲),所以每天很多任务安排,为了不混乱,免不了要用 GTD(Go to do)软件 ...

  9. JVM指令集(指令码、助记符、功能描述)(转)

    JVM指令集(指令码.助记符.功能描述) 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式:  aconst_null 功能描述:  null进栈. 指令 ...

  10. 深入理解Oracle RAC 12c 笔记

    深入理解Oracle RAC 12c 跳转至: 导航. 搜索 文件夹 1 概述 2 集群件管理和故障诊断 3 执行实践 4 新特性 5 存储和ASM 6 应用设计上的问题 7 管理和调优一个复杂的RA ...