本文内容并非原创,使用资料均来自互联网。
dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互,为什么呢?
先看看zookeeper本身自带的客户端的问题。
1)ZooKeeper的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
相关推荐
本篇文章将深入探讨 ZooKeeper 客户端的使用,这是继上一篇文章后的第二部分,我们将继续学习如何与 ZooKeeper 交互以及利用其功能。 ZooKeeper 的客户端是连接到 ZooKeeper 服务器的接口,它提供了丰富的 API 供...
这个版本支持Zookeeper作为服务注册中心,因此你需要在你的项目中包含`dubbo-2.5.3.jar`,以及其他可能的依赖,如`common-lang`, `common-logging`, `netty`, `zkclient`等,这些都是Dubbo正常工作所必需的。...
3. **zkclient**: 这是一个更高级别的ZooKeeper客户端库,提供了更方便的API来操作ZooKeeper,常被用于简化Dubbo与ZooKeeper的交互。 4. **slf4j-api**: Simple Logging Facade for Java,为各种日志框架提供一个...
本文主要讲解了如何将阿里巴巴的Dubbo、Zookeeper和SpringMVC整合使用,以实现高效的服务治理和调用。 首先,Dubbo是一个高性能、轻量级的Java分布式服务框架,它主要解决了在微服务架构中服务间的通信问题。在...
ZkClient是一个由Datameer工程师开发的开源客户端库,它旨在简化ZooKeeper客户端的使用过程,通过封装ZooKeeper原生API,提供了更为简洁易用的接口。在实际应用中,ZkClient帮助开发者解决了使用ZooKeeper客户端时...
此外,理解如何在分布式系统中正确地使用Zookeeper来解决一致性问题,以及如何监控和调整Zookeeper的性能,也是成为Zookeeper专家的关键。 总之,Zookeeper-3.4.6是一个重要的分布式协调服务组件,它为分布式应用...
【Dubbo+Zookeeper的RPC分布式集群服务系统】是一个基于Java开发的高性能、轻量级的服务框架,结合Zookeeper作为注册中心实现远程过程调用(RPC)的分布式集群服务。Dubbo是阿里巴巴开源的分布式服务框架,而...
5. **监控与管理**:Zookeeper提供监控工具,如ZKClient或Zookeeper自带的`bin/zkCli.sh`客户端,可以用来查看和管理注册在Zookeeper上的Dubbo服务。 **Zookeeper集群搭建** 1. **多服务器配置**:为了实现高可用...
zookeeper客户端,使用zookeeper必备。Dubbo相关
Zookeeper 提供了 Java 官方客户端,此外还有 Curator、ZkClient、Zookeeper-Client-Common 等第三方客户端库。 25. chubby 是什么,和 zookeeper 比你怎么看?Chubby 是 Google 开发的一个分布式锁服务,与 ...
ZooKeeper的java客户端有zk自带的zkclient和Apache开源的Curator。 ZooKeeper提供了文件系统通知机制,Zookeeper提供一个多层级的节点命名空间(节点称为znode)。与文件系统不同的是,这些节点都可以设置关联的...
ZooKeeper客户端提供了许多命令来操作和监控Znode,例如: - `create`:创建节点。 - `get`:获取节点数据。 - `set`:设置节点数据。 - `delete`:删除节点。 - `ls`:列出子节点。 #### 27. ZAB和Paxos算法的联系...
1. 会话(Session):Zookeeper客户端与服务器之间建立的连接,会话期间客户端与服务器保持心跳检测,如果会话超时或服务器宕机,会话将失效。 2. 节点(Znode):Zookeeper数据存储的基本单位,有临时节点和持久...
1.1. 为什么学习Zookeeper 学习Zookeeper的主要原因在于它在分布式环境中的重要作用。随着业务规模的扩大,单节点架构已无法满足需求,分布式架构成为趋势。然而,分布式架构带来了新的挑战,如数据一致性、服务...
5. `zkclient`或`curator`目录:Zookeeper客户端库,用于与Zookeeper交互。 通过这个项目,开发者可以学习如何配置SpringBoot应用,将Dubbo服务暴露出去,以及如何编写服务消费者来调用这些服务。同时,Zookeeper的...
- `Curator`是Java的Zookeeper客户端库,同样支持watcher监听。 **序列化和权限控制**: - Zookeeper使用Jute进行数据序列化。 - ACL(Access Control List)权限控制,通过schema(ip、Digest、world、super)进行...
这里使用的是 `dubbo-spring-boot-starter` 和 `zkclient`: ```xml <!-- 引入 dubbo-spring-boot-starter 以及 zkclient 依赖 --> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-...