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

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

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

转载于:https://www.cnblogs.com/donlianli/p/3847642.html

为什么dubbo使用ZkClient作为zookeeper的客户端相关推荐

  1. zookeeper 进入客户端_ZooKeeper:第三方客户端 ZKClient

    ZkClient 在使用ZooKeeper的Java客户端时,经常需要处理几个问题:重复注册watcher.session失效重连.异常处理. 要解决上述的几个问题,可以自己解决,也可以采用第三方的j ...

  2. Zookeeper分布式一致性原理(六):Zookeeper开源客户端zkClient

    zkClient 是GitHub上的一个开源Zookeeper客户端项目,是由Datameer的工程师Stefan和Groschupf和PeteVoss一起开发的.zkClient在Zookeeper ...

  3. Zookeeper java客户端ZkClient使用详解

    简介 ZKClient是一个Zookeeper客户端框架,是对Zookeeper原生API的封装.使得使用更方便.功能更多. 查看之前必须要对Zookeeper的基本命令操作.Watch机制.Acl等 ...

  4. ZooKeeper学习笔记五 ZooKeeper开源客户端ZkClient

    本文学习资源来自<从Paxos到ZooKeeper分布式一致性原理与实践> ZkClient ZkClient 在ZooKeeper原生API接口之上进行了封装,是一个更易用的ZooKee ...

  5. dubbo源码解析-zookeeper创建节点

    前言 在之前dubbo源码解析-本地暴露中的前言部分提到了两道高频的面试题,其中一道dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?在上周的dubbo源码 ...

  6. Zookeeper开源客户端框架Curator的简单使用

    为什么80%的码农都做不了架构师?>>>    Curator最初由Netflix的Jordan Zimmerman开发, Curator提供了一套Java类库, 可以更容易的使用Z ...

  7. [转载]Zookeeper开源客户端框架Curator简介

    转载声明:http://macrochen.iteye.com/blog/1366136 Zookeeper开源客户端框架Curator简介 博客分类: Distributed Open Source ...

  8. Zookeeper 原生客户端、可视化工具 ZooInspector 、Apache Curator

    目录 Zookeeper 原生客户端 Apache Curator 开源客户端 可视化客户端工具 ZooInspector Zookeeper 原生客户端 1.类似 Redis 有多种 Java 客户 ...

  9. zookeeper 进入客户端_zookeeper客户端命令详解

    今天同事突然向看一下zookeeper中都创建了哪些节点,而我本人对zookeeper的客服端命令了解的很少,有些操作竟然不知道怎么用,于是乎就索性整理一下zookeeper客服端命令的使用,并再此记 ...

最新文章

  1. 脑机接口拼写器是否真的安全?华中科技大学研究团队对此做了相关研究
  2. 从0系统学 Android--1.1认识 Android
  3. Go语言_通神路五耀篇(3)
  4. linux下的几种进程间通信方式的特点
  5. 源代码安装g95编译器
  6. linux redis 监控工具,Redis服务器监控工具redis-live
  7. 5导出word_重磅更新 !支持题库导出为word
  8. 2021高通人工智能应用创新大赛--创新赛道-决赛阶段小结
  9. 微软提高 Microsoft 365 的漏洞奖励
  10. Unity 场景分页插件 World Streamer 支持无限大地图的解决方案(一)
  11. 删除的PSD文件在哪可以恢复?一定要看看
  12. 领带的10种打法图解
  13. html实现音乐界面设计,基于HTML5技术的音乐播放器的设计与实现.doc
  14. 用Python爬取手机APP
  15. PCIe PTM(Precision Time Measurement)介绍
  16. Python二叉树详解笔记
  17. 给DDN社区志愿者的一封信
  18. LiveRTMP内置IPCamera实现RTMP直播摄像机功能
  19. 虚拟机配置静态ip地址(俗称固定ip地址)
  20. nature 计算机科学,Nature Communications |西电计算机科学与技术学院刘西洋教授团队在计算病理学领域取得新进展...

热门文章

  1. jave类命名_Java重命名文件– Jave移动文件
  2. java se面试题_Java SE 8面试问答(第1部分)
  3. Spring安全示例UserDetailsS​​ervice
  4. spring aop示例_具有AOP事务管理的Spring ORM示例
  5. 通过修改word文件,来屏蔽宏代码
  6. linux下截图软件 shutter
  7. 学习C++开发技术,常见误解有哪些?
  8. 开课吧:常见的数据可视化分析工具有哪些?
  9. 简析IP视频监控图像处理芯片介绍及应用
  10. Log4J文件路径设置