Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1940281
  • 博文数量: 1000
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7921
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-20 09:23
个人简介

storage R&D guy.

文章分类

全部博文(1000)

文章存档

2019年(5)

2017年(47)

2016年(38)

2015年(539)

2014年(193)

2013年(178)

分类: 云计算

2015-07-27 18:01:06

开发ZooKeeper程序的时候,写这样的代码

ZooKeeper zk = new ZooKeeper(connectString, 3000, defaultWatcher);

zk.exists("/abc",false);

会马上抛出异常

经研究发现,zk对象的建立很快,但是它并没有初始化完成,需要很长一段时间去完成,我的情况是5秒左右。如果马上调用zk.create, zk.exists都会 抛出异常

两种解决方法:

1. 增加timeout,比如把3000改为13000。 致命缺点,以后连接的timeout也是这个时间,太长了,20秒才能检测出连接断了。

2. 把zk的操作放到wather中区做,watcher只有在初始化完成后才回被调用,这样我们的timeout可以设置为1000也没有问题。

3. 一定要马上调用,用下面这段代码等待一段时间

while (States.CONNECTING == zk.getState()) sleep(300);


阅读(610) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~