zookeeper错误KeeperErrorCode = ConnectionLoss解决
原因:
一般是由于连接还未完成就执行zookeeper的get/create/exsit操作引起的.
解决方法:
利用"CountDownLatch 类 + zookeeper的watcher + zookeeper的getStat" 实现连接完成后再调用.
可防止此错误发生.
示例类如下(为一配置获取类):
- import java.util.concurrent.CountDownLatch;
- import org.apache.zookeeper.WatchedEvent;
- import org.apache.zookeeper.Watcher;
- import org.apache.zookeeper.Watcher.Event.KeeperState;
- import org.apache.zookeeper.ZooKeeper;
- import org.apache.zookeeper.ZooKeeper.States;
- import org.apache.zookeeper.data.Stat;
- public class Conf{
- public static void waitUntilConnected(ZooKeeper zooKeeper, CountDownLatch connectedLatch) {
- if (States.CONNECTING == zooKeeper.getState()) {
- try {
- connectedLatch.await();
- } catch (InterruptedException e) {
- throw new IllegalStateException(e);
- }
- }
- }
- static class ConnectedWatcher implements Watcher {
- private CountDownLatch connectedLatch;
- ConnectedWatcher(CountDownLatch connectedLatch) {
- this.connectedLatch = connectedLatch;
- }
- @Override
- public void process(WatchedEvent event) {
- if (event.getState() == KeeperState.SyncConnected) {
- connectedLatch.countDown();
- }
- }
- }
- static public Conf Instance(){
- if(static_ == null){
- static_ = new Conf();
- }
- return static_;
- }
- public boolean Init(String hostports, int times){
- try{
- CountDownLatch connectedLatch = new CountDownLatch(1);
- Watcher watcher = new ConnectedWatcher(connectedLatch);
- zk_ = new ZooKeeper(hostports, times, watcher);
- waitUntilConnected(zk_, connectedLatch);
- }
- catch(Exception e){
- System.out.println(e);
- return false;
- }
- return true;
- }
- public String Get(String keys){
- String re = "";
- String ppath = "/zookeeper";
- int oldpos = -1;
- int pos = 0;
- while(true){
- pos = keys.indexOf(".", oldpos + 1);
- if(pos < 0){
- ppath += "/";
- String str = keys.substring(oldpos + 1);
- ppath += str;
- break;
- }
- ppath += "/";
- String str = keys.substring(oldpos + 1, pos);
- ppath += str;
- oldpos = pos;
- }
- Stat stat = new Stat();
- try{
- byte[] b = zk_.getData(ppath, false, stat); //获取节点的信息及存储的数据
- re = new String(b);
- }
- catch(Exception e){
- System.out.println(e);
- }
- return re;
- }
- private Conf(){
- }
- private ZooKeeper zk_;
- static private Conf static_;
- public static void main(String args[]){
- String hostports = "192.168.1.88:2181,192.168.1.88:2182,192.168.1.88:2183";
- Conf.Instance().Init(hostports, 1000);
- String str = Conf.Instance().Get("conf.logicpoint.subscriberserverip");
- str = Conf.Instance().Get("conf.logicpoint.subscriberserverport");
- System.out.println(str);
- while(true){
- try{Thread.sleep(100);}
- catch(Exception e){
- }
- }
- }
- }
zookeeper错误KeeperErrorCode = ConnectionLoss解决的更多相关文章
- zookeeper客户端KeeperErrorCode = ConnectionLoss异常问题排查历险记
经过线报,说前方应用有异常,导致了可用性变差.咦!讨厌的异常,抛异常是程序猿最讨厌的事情之一. 经过收集异常信息如下 2019-06-24 10:57:41.806 ERROR [hades- ...
- org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /eclipse20171118
1:如果有一天,你有幸看到了这个错误,也许你像我一样low,因为此时,你已经准备开发Zookeeper程序了,却还没有把Zookeeper的服务启动起来. org.apache.zookeeper.K ...
- java连接zookeeper服务器出现“KeeperErrorCode = ConnectionLoss for /test”
昨天调试java连接zookeeper服务器,zookeeper搭建过程在这里不做赘述,在创建连接后,然后操作节点一直报异常 错误信息如下: Exception in thread "mai ...
- alimama open source mdrill启动后访问蓝鲸任务时出错:Caused by:org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss
启动后,访问:http://IP:1107/mdrill.jsp 蓝鲸任务
- java连接zookeeper服务器出现“KeeperErrorCode = ConnectionLoss for ...”
错误信息如下: Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossExce ...
- zk的KeeperErrorCode = ConnectionLoss错误
额,这东西都快把人搞崩溃了,各种排查各种正常. 最后竟然是因为我在客户端未连接上zkserver的时候就进行了create操作造成的错误. 噗, Exception in thread "m ...
- keepererrorcode = connectionloss for 错误处理
自己的环境在虚拟机上,于是使用同事的环境调试问题,发现无法初始化成功,提示keepererrorcode = connectionloss for,于是上网查了下资料整理如下: 1.对比代码中引用的j ...
- coreseek常见错误原因及解决方法
coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和 ...
- AndroidStudio错误总结及解决(待续)
AndroidStudio错误总结及解决 一. 当安装好AndroidStudio开启的时候出现如下错误: 百度的解决方法: 1)进入刚安装的Android Studio目录下的bin目录.找到ide ...
随机推荐
- cURL安装和使用笔记
0.前言 cURL是一个利用URL语法在命令行下工作的文件传输工具.它支持文件上传和下载,所以是综合传输工具,但习惯称cURL为下载工具.cURL还包含了用于程序开发的libcurl.cURL ...
- Oracle的dbms_output包的put()和put_line()的区别只是有没有回车换行吗?(转)
答案是否 除了自动添加回车换行外,还有就是缓冲区最大容量的问题!! 无论如何设置serveroutput size,10g里 put() 最多只能输出 32767 个byte 而 put_line() ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- hdu 1007 最近点对问题(Splay解法)
为什么要写这个题..经典啊,当然,别以为我用分治做的,不过主要思想还是那神奇的六个点共存(一个h*2h的矩形中最多能放下多少个点使得两两距离不超过h) 其实我是在这里看到的 http://commun ...
- 浅谈spring——注解配置(九)
spring定义一个切面是件麻烦的事情,需要实现专门的接口,还要进行一些较为复杂的配置,有没有较为简单的方法??? @AspectJ注解可以很容易定义一个切面,且不需要实现任何的接口.缺点是对JDK的 ...
- 【MongoDB】The description of index(一)
From this blog, we start to talk about the index in mongo Database, which is similar to the traditio ...
- Hadoop大数据面试--Hadoop篇
本篇大部分内容參考网上,当中性能部分參考:http://blog.cloudera.com/blog/2009/12/7-tips-for-improving-mapreduce-performanc ...
- HDU 4869 Turn the pokers(推理)
HDU 4869 Turn the pokers 题目链接 题意:给定n个翻转扑克方式,每次方式相应能够选择当中xi张进行翻转.一共同拥有m张牌.问最后翻转之后的情况数 思路:对于每一些翻转,假设能确 ...
- atitit.团队建设--要不要招技术储备人才的问题
atitit.团队建设--要不要招技术储备人才的问题 1. 人才的储备和招聘. 1 1.1. 模式1. 养兵千日,用兵一时 1 1.2. 模式2,暂时抱佛脚,也不多招一个人 1 ...
- Android 网络通信框架Volley基本介绍
Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v= ...