1.KeeperException
当和zookeeper已经建立连接,但是要查找的节点信息不存在时,会抛出此异常。
当在查询节点信息的过程中,和zookeeperServer失去连接,此时KeeperException.Code为CONNECTIONLOSS,则,zookeeperClient端会继续查找ZK_CONNECTION_RETRIES*ZK_INIT_RETRIES次数,目前,ZK_CONNECTION_RETRIES为10次,是重试查找节点信息的次数,ZK_INIT_RETRIES为30次,是重新连接zookeeper服务端的尝试次数。
此异常可能出现的地方:
zkCreateRecursively(String zNode, byte[] data, boolean overwrite)方法、
getNodeData(String node, Stat stat, boolean retry)方法、getPrimaryAvatarAddress(String address, Stat stat, boolean retry)方法
getPrimaryAvatarAddr(String address, Stat stat, boolean retry)方法、getPrimaryAvatarAddress(URI address, Stat stat, boolean retry)方法
getNodeStats(String node)方法、
getPrimaryRegistrationTime(URI address)方法、
exists(String address, Watcher watcher, boolean namenode)方法
createEphemeral(String path) 方法、
DeleteNode(String address)方法
此时应检查zookeeper的节点信息。
2.IOException
当和zookeeper建立连接失败时会有此异常抛出,同时会打印出:
java.net.ConnectException: Connection refused: no further information。
此异常可能出现的地方:
clearPrimary(String address)方法、
clearPrimarytmp(String address)方法、
registerPrimary(String address, String realAddress, boolean overwrite)方法、
registerPrimary(String address, String realAddress)方法、
zkCreateRecursively(String zNode, byte[] data,boolean overwrite)方法、
primeConnection()方法、
initZK()方法、
getNodeData(String node, Stat stat, boolean retry)方法、
getPrimaryAvatarAddress(String address, Stat stat, boolean retry)方法、
getPrimaryAvatarAddr(String address, Stat stat, boolean retry)方法、
getPrimaryAvatarAddress(URI address, Stat stat, boolean retry)方法啊、
getNodeStats(String node)方法、
getPrimaryRegistrationTime(URI address)方法
exists(String address, Watcher watcher, boolean namenode)方法
createEphemeral(String path)方法、
DeleteNode(String address)方法
此时应检查zookeeper的服务是否正常,与zookeeper通信的网络是否正常。
3. ConnectException
初始化zookeeperClient的时候,即在initZK方法中,其中的State会是CONNECTING,只有连接成功的时候才会是CONNECTED状态。
如果连接不上,在尝试一定次数之后(界面上会打印相应次数的java.net.ConnectException: Connection refused: no further information)
目前设置的是30次,会退出连接。并抛出IOException,打印“Timed out trying to connect to ZooKeeper”。
此异常也是在连接不上zookeeper的时候会出现。
此时应检查zookeeper的服务是否正常,与zookeeper通信的网络是否正常。
4. InterruptedException
导致此异常出现,是因为zookeeperClient的同步方法在运行的时候被阻塞。
发生此异常的情况比较复杂。
可参见此博客:
http://www.ibm.com/developerworks/cn/java/j-jtp05236.html
http://manming.iteye.com/blog/345595
若zookeeper停止失败,会有InterruptedException抛出。
5.java.lang.IllegalArgumentException
此异常会出现在,当查询zookeeper中的节点时,节点名字的格式输入不正确时。
6.UnsupportedEncodingException
当向zookeeper注册节点和删除节点不成功时会出现。
备注:
以上均是针对AvatarZookeeperClient类进行的分析。