原因:

一般是由于连接还未完成就执行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. FileReader读取文件里文乱码问题

    有一个UTF-8编码的文本文件,用FileReader读取到一个字符串,然后转换字符集:str=newString(str.getBytes(),"UTF-8");结果大部分中文显 ...

  2. Codeforces Round #309 (Div. 2) C

    题意: 就是给出总共同拥有k种颜色.每种颜色有ki种,排列必须满足第i+1种的最后一种颜色必须在第i种最后一种颜色的后面,其它颜色任意.总共同拥有多少种排列点的方法. 分析: 如果d[i]表示前i种的 ...

  3. TStack,TQueue,TObjectList,TObjectStack等等

    TStack,TQueue,TObjectList,TObjectStack等等,都在Contnrs.pas单元里,需要手动添加. 不同于TList类,TObjectList对象将销毁任何从列表中删除 ...

  4. haproxy 中的http请求和https请求

    use Mojolicious::Lite; use JSON qw/encode_json decode_json/; use Encode; no strict; use JSON; # /foo ...

  5. WebService-03-使用CXF开发服务端和客户端

    写在前面的话 前面两节说了使用Java提供的包开发服务端和客户端,现在使用CXF来开发,CXF提供了两个类发而服务,一个是ServerFactoryBean,另一个是JaxWsServerFactor ...

  6. WPF-20:richtextbox相关操作(转)

    WPF中的richtextbox与winform中的richtextbox的使用不同,看看下面的基本操作: 一.取出richTextBox里面的内容  (1)将richTextBox的内容以字符串的形 ...

  7. JSP网站开发基础总结《九》(转)

    本篇属于附加篇,在之前的总结中给大家提到过一个关于登录状态验证的效果,当时是通过Session对象完成的,今天我查了一下,JSP为我们封装了一个用于过滤用的过滤器类Filter,通过它我们就可以非常轻 ...

  8. MooTools,jQuery库的一些比对

    jQuery与MooTools库的一些比对   今天就我自己的一些认识比对下这两个JS框架,更多的是希望大家能够对MooTools这个JS框架有更多的认识.毕竟,大多数从事web前端的人对上手容易的j ...

  9. Conversion to Dalvik format failed: Unable to execute dex

    最近莫名奇妙遇到“Conversion to Dalvik format failed: Unable to execute dex”错误,stackoverflow以后得到结果 把项目中classp ...

  10. WordPress更改固定链接出现404的解决方案

    很多站长在玩WordPress的时候,可能会碰到一个问题,就是想把WordPress伪静态,在后台设置好固定链接之后,就会出现文章页面或者所有的页面都出现404错误.解决方法如下: 1,.htacce ...