原因:

一般是由于连接还未完成就执行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. SQL查询语句联系

    建立四个表,分别是学生表,课程表,成绩表和教师信息表 插入信息: 题目: 1. 查询Student表中的所有记录的Sname.Ssex和Class列 select Sname,Ssex,Class f ...

  2. efwplus框架

    此框架得到博客园大神@张善友的关注,建议我写一篇此框架的最新介绍,好在@dotNet跨平台公众号上推荐给大家,得到大神的指示当然激动,马不停蹄的赶出此文,供大家参考!   一.使用efwplus框架的 ...

  3. HDU3257 Hello World!

    Hello World! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  4. BT5 firefox Flash插件问题

    今天在BT下安装了Nessus,好不容易安装好了,注册成功,本以为大功告成,但是在最后关头,却出现一个“未安装flash插件”错误,在bT下尝试着安装flahs插件,蛋碎一地,,,没能解决. 我的BT ...

  5. C++ 指针—02 指针与引用的对照

    ★同样点: ●都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:而引用则是某块内存的别名. ★不同点: ●指针是一个实体,而引用仅是个别名: ●引用仅仅能在定义时被初始化一次,之后不可变: ...

  6. linux c socket 案源

    service结束 #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #inclu ...

  7. sprintf,多少钱你知道?

    选<CSDN 社区电子杂志——C/C++杂志>http://emag.csdn.net 2005 年1 月 总号1 期 - 93 -笔者:steedhorse(晨星)printf 可能是很 ...

  8. MySQL JDBC事务处理、封装JDBC工具类

    MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...

  9. Palindrome Numbers(LA2889)第n个回文数是?

     J - Palindrome Numbers Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu ...

  10. 不可不知的DIP、IoC、DI以及IoC容器

    面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.当中.OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念. 本文首先用实例阐述四个概 ...