原因:

一般是由于连接还未完成就执行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. DotNetBar怎样控制窗口样式

    DotNetBar怎样控制窗口样式 老帅  在C#中使用控件DevComponents.DotNetBar时,怎样创建一个美丽的窗口.并控制窗口样式呢? 1.新建一个DotNetBar窗口       ...

  2. HashMap的工作原理(转)

    HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此 ...

  3. Java 开源博客——B3log Solo 0.6.1 正式版发布了!

    Java 开源博客 —— B3LOG Solo 0.6.1 正式版发布了!欢迎大家下载. 该版本主要是改善细节体验,并加入了一款 Metro 风格的皮肤. 特性 基于标签的文章分类 Ping Goog ...

  4. 跟我一起学extjs5(13--运行菜单命令在tabPanel中显示模块)

    跟我一起学extjs5(13--运行菜单命令在tabPanel中显示模块)         上面设计好了一个模块的主界面,以下通过菜单命令的运行来把这个模块增加到主界面其中. 在MainModule. ...

  5. GMM的EM算法

    在聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut一文中我们给出了GMM算法的基本模型与似然函数,在EM算法原理中对EM算法的实现与收敛性证明 ...

  6. Android NDK入门实例 计算斐波那契数列一生成jni头文件

    最近要用到Android NDK,调用本地代码.就学了下Android NDK,顺便与大家分享.下面以一个具体的实例计算斐波那契数列,说明如何利用Android NDK,调用本地代码.以及比较本地代码 ...

  7. cocos2D(三)---- 第一cocos2d的程序代码分析

    在第一讲中已经新建了第一个cocos2d程序,执行效果例如以下: 在这讲中我们来分析下里面的代码,了解cocos2d的工作原理,看看屏幕上的这个"Hello World"是怎样显示 ...

  8. .Net Core配置文件

    .Net Core下如何管理配置文件 一.前言 根据该issues来看,System.Configuration在.net core中已经不存在了,那么取而代之的是由Microsoft.Extensi ...

  9. jQuery拖动调整表格列宽度-resizableColumns

    实现鼠标可拖动调整表格列宽度 如图: 一.引入文件: <script src="/js/jquery-1.8.0.min.js" type="text/javasc ...

  10. 菜鸟学Java(十九)——WEB项目測试好帮手,Maven+Jetty

    做WEB开发,測试是一件非常费时间的事情.所以我们就应该用更简单.更快捷的方式进行測试.今天就向大家介绍一个轻量级的容器--jetty.j今天说的etty是Maven的一个插件jetty-maven- ...