`
donlianli
  • 浏览: 340841 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Elasticsearch...
浏览量:218789
社区版块
存档分类
最新评论

为什么dubbo使用ZkClient作为zookeeper的客户端

阅读更多

本文内容并非原创,使用资料均来自互联网。

 

 

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

 

关于我,邯郸人
对这类话题感兴趣?欢迎发送邮件至donlianli@126.com
 
 
 
分享到:
评论

相关推荐

    ZooKeeper 客户端的使用(二).

    本篇文章将深入探讨 ZooKeeper 客户端的使用,这是继上一篇文章后的第二部分,我们将继续学习如何与 ZooKeeper 交互以及利用其功能。 ZooKeeper 的客户端是连接到 ZooKeeper 服务器的接口,它提供了丰富的 API 供...

    dubbo+zookeeper 客户端所需jar包

    这个版本支持Zookeeper作为服务注册中心,因此你需要在你的项目中包含`dubbo-2.5.3.jar`,以及其他可能的依赖,如`common-lang`, `common-logging`, `netty`, `zkclient`等,这些都是Dubbo正常工作所必需的。...

    dubbo和zookeeper整合所需要的jar包

    3. **zkclient**: 这是一个更高级别的ZooKeeper客户端库,提供了更方便的API来操作ZooKeeper,常被用于简化Dubbo与ZooKeeper的交互。 4. **slf4j-api**: Simple Logging Facade for Java,为各种日志框架提供一个...

    dubbo和Zookeeper和SpringMVC的使用.docx

    本文主要讲解了如何将阿里巴巴的Dubbo、Zookeeper和SpringMVC整合使用,以实现高效的服务治理和调用。 首先,Dubbo是一个高性能、轻量级的Java分布式服务框架,它主要解决了在微服务架构中服务间的通信问题。在...

    zkclient文档

    ZkClient是一个由Datameer工程师开发的开源客户端库,它旨在简化ZooKeeper客户端的使用过程,通过封装ZooKeeper原生API,提供了更为简洁易用的接口。在实际应用中,ZkClient帮助开发者解决了使用ZooKeeper客户端时...

    zookeeper-3.4.6的服务包

    此外,理解如何在分布式系统中正确地使用Zookeeper来解决一致性问题,以及如何监控和调整Zookeeper的性能,也是成为Zookeeper专家的关键。 总之,Zookeeper-3.4.6是一个重要的分布式协调服务组件,它为分布式应用...

    【Dubbo+Zookeeper的RPC分布式集群服务系统】服务端.zip

    【Dubbo+Zookeeper的RPC分布式集群服务系统】是一个基于Java开发的高性能、轻量级的服务框架,结合Zookeeper作为注册中心实现远程过程调用(RPC)的分布式集群服务。Dubbo是阿里巴巴开源的分布式服务框架,而...

    zookeeper解压版安装包

    5. **监控与管理**:Zookeeper提供监控工具,如ZKClient或Zookeeper自带的`bin/zkCli.sh`客户端,可以用来查看和管理注册在Zookeeper上的Dubbo服务。 **Zookeeper集群搭建** 1. **多服务器配置**:为了实现高可用...

    zkclient-0.1.jar

    zookeeper客户端,使用zookeeper必备。Dubbo相关

    ZooKeeper面试题(2020最新版)-重点.pdf

    Zookeeper 提供了 Java 官方客户端,此外还有 Curator、ZkClient、Zookeeper-Client-Common 等第三方客户端库。 25. chubby 是什么,和 zookeeper 比你怎么看?Chubby 是 Google 开发的一个分布式锁服务,与 ...

    Zookeeper面试题 20道.pdf

    ZooKeeper的java客户端有zk自带的zkclient和Apache开源的Curator。 ZooKeeper提供了文件系统通知机制,Zookeeper提供一个多层级的节点命名空间(节点称为znode)。与文件系统不同的是,这些节点都可以设置关联的...

    ZooKeeper面试题(2022最新版)-重点.docx

    ZooKeeper客户端提供了许多命令来操作和监控Znode,例如: - `create`:创建节点。 - `get`:获取节点数据。 - `set`:设置节点数据。 - `delete`:删除节点。 - `ls`:列出子节点。 #### 27. ZAB和Paxos算法的联系...

    zookeeper入门学习

    1. 会话(Session):Zookeeper客户端与服务器之间建立的连接,会话期间客户端与服务器保持心跳检测,如果会话超时或服务器宕机,会话将失效。 2. 节点(Znode):Zookeeper数据存储的基本单位,有临时节点和持久...

    Zookeeper综述1

    1.1. 为什么学习Zookeeper 学习Zookeeper的主要原因在于它在分布式环境中的重要作用。随着业务规模的扩大,单节点架构已无法满足需求,分布式架构成为趋势。然而,分布式架构带来了新的挑战,如数据一致性、服务...

    DubboxTest.zip

    5. `zkclient`或`curator`目录:Zookeeper客户端库,用于与Zookeeper交互。 通过这个项目,开发者可以学习如何配置SpringBoot应用,将Dubbo服务暴露出去,以及如何编写服务消费者来调用这些服务。同时,Zookeeper的...

    0813分布式协调服务-zookeeper1

    - `Curator`是Java的Zookeeper客户端库,同样支持watcher监听。 **序列化和权限控制**: - Zookeeper使用Jute进行数据序列化。 - ACL(Access Control List)权限控制,通过schema(ip、Digest、world、super)进行...

    springboot整合dubbozookeeper做注册中心.docx

    这里使用的是 `dubbo-spring-boot-starter` 和 `zkclient`: ```xml <!-- 引入 dubbo-spring-boot-starter 以及 zkclient 依赖 --> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-...

Global site tag (gtag.js) - Google Analytics