电子商务网站建设详细策划书,WordPress结婚主题模板,网站建设参考文献,杭州建设职业学校网站dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互#xff0c;为什么呢#xff1f;
先看看zookeeper本身自带的客户端的问题。
1#xff09;ZooKeeper的Watcher是一次性的#xff0c;用过了需要再注册#xff1b;
2#xff09; session的超时后…dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互为什么呢
先看看zookeeper本身自带的客户端的问题。
1ZooKeeper的Watcher是一次性的用过了需要再注册
2 session的超时后没有自动重连生产环境中如果网络出现不稳定情况那么这种情况出现的更加明显 3 没有领导选举机制集群情况下可能需要实现stand by一个服务挂了另一个需要接替的效果 4 客户端只提供了存储byte数组的接口而项目中一般都会使用对象。
5客户端接口需要处理的异常太多并且通常我们也不知道如何处理这些异常。
I0Itec这个zookeeper客户端基本上解决了上面的所有问题主要有以下特性
1) 提供了zookeeper重连的特性------能够在断链的时候,重新建立连接,无论session失效与否.
2) 持久的event监听器机制------ZKClient框架将事件重新定义分为了stateChanged、znodeChanged、dataChanged三种情况用户可以注册这三种情况下的监听器znodeChanged和dataChanged和路径有关而不是注册Watcher。
3) zookeeper异常处理-------zookeeper中繁多的Exception,以及每个Exception所需要关注的事情各有不同I0Itec简单的做了封装.
4) data序列化------简单的data序列化.(Serialzer/Deserialzer)
5有默认的领导选举机制
请注意使用I0Itect-zkClient暂时有几个方法仍需要重写:
1) create方法创建节点时,如果节点已经存在,仍然抛出NodeExistException,可是我期望它不在抛出此异常.
2) retryUtilConnected如果向zookeeper请求数据时(create,delete,setData等),此时链接不可用,那么调用者将会被阻塞直到链接建立成功;不过我仍然需要一些方法是非阻塞的,如果链接不可用,则抛出异常,或者直接返回.
3) create方法创建节点时,如果节点的父节点不存在,我期望同时也要创建父节点,而不是抛出异常.
4) data监测我需要提供一个额外的功能来补充watch的不足,开启一个线程,间歇性的去zk server获取指定的path的data,并缓存起来..归因与watch可能丢失,以及它不能持续的反应znode数据的每一次变化,所以只能手动去同步获取。
【注】ZKClient是Datameer开源的一个Zookeeper客户端实现开源比较早参见https://github.com/sgroschupf/zkclient
参考资料http://san-yun.iteye.com/blog/1977454