Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1281461
  • 博文数量: 127
  • 博客积分: 2286
  • 博客等级: 大尉
  • 技术积分: 1943
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-10 10:37
文章分类

全部博文(127)

文章存档

2018年(1)

2015年(2)

2014年(1)

2013年(30)

2012年(88)

2011年(5)

分类: 云计算

2012-05-22 15:43:43

开发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);


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