聊聊、Zookeeper 客户端 ZkClient

【ZkClient】 

 ZkClient 是 GitHub 上一个开源的客户端,如果我们用 Maven 来管理工程,则引用如下。

1
2
3
4
5
6
7
8
9
10
<dependency>
   <groupId>org.apache.zookeeper</groupId>
   <artifactId>zookeeper</artifactId>
   <version>3.4.10</version>
</dependency>
<dependency>
   <groupId>com.github.sgroschupf</groupId>
   <artifactId>zkclient</artifactId>
   <version>0.1</version>
</dependency>

 

 创建连接

  • public ZkClient(String serverstring)
  • public ZkClient(String serverstring,int connectionTimeout)
  • public ZkClient(String serverstring,int sessionTimeout,int connectionTimeout)
  • public ZkClient(String serverstring,int sessionTimeout,int connectionTimeout,ZkSerializer zkSerializer)
  • public ZkClient(IZkConnection connection)
  • public ZkClient(IZkConnection connection,int connectionTimeout)
  • public ZkClient(IZkConnection connection,int connectionTimeout,ZkSerializer zkSerializer)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package zookeeper.zkclient;
 
import org.I0Itec.zkclient.ZkClient;
 
public class OpenZkClient {
 
    public static void main(String[] args) {
         
        ZkClient client = new ZkClient("127.0.0.1:2181",5000);
        System.out.println(client.getChildren("/"));
         
    }
     
}

 简单来说,开源客户端相对于原 API,主要是将比较繁琐注册,删除节点不能有子节点,新增节点必须有父节点,等等一些容易出错的地方进行封装。封装以后程序员开发的时候就可以不 用考虑这些小的细节,从而提高开发效率。

 还是来说说构造器参数的含义:

 serverstring 可以指定单个服务器地址也可以是多个,这个和原 API 创建连接构造参数是一样的含义。

 connectionTimeout,sessionTimeout 是连接超时时间和会话超时时间。单位都是毫秒,其中会话默认是 30000 毫秒,也就是 30 秒。

 connection 是 IZkConnection 的接口实现类。

 zkSerializer 自定义的序列化器,关于序列化和反序列化是一个很大的话题,有 Java 自带的序列化工具,也有很多开源的序列化工具,以后会写一章序列化。

 

 创建节点

  •  String create(final String path,Object data,final CreateMode mode)
  •  String create(final String path,Object data,final List<ACL> acl,final CreateMode mode)
  •  void create(final String path,Object data,final CreateMode mode,final AsyncCallback.StringCallback callback,final Object data)
  •  void createEphemeral(final String path)
  •  void createEphemeral(final String path,final Object data)
  •  void createPersistent(String path)
  •  void createPersistent(String path,boolean createParents)
  •  void createPersistent(String path,Object data)
  •  void createPersistent(String path,List<ACL> acl,Object data)
  •  void createPersistentSequential(String path,Object data)
  •  void createEphemeralSequential(final String path,final Object data)

 创建节点和原生 API 相比,原生只能传 byte 数组,这里可以传 Object。而且父节点不存在可以指定是否创建。

 

 删除节点

  •  boolean delete(final String path)
  •  delete(final String path,final AsyncCallback.VoidCallback callback,final Object context)
  •  boolean deleteRecursive(String path)

 说一下 deleteRecursive,原生 API 删除节点如果有子节点则必须把子节点都删掉才可以,这里的函数则不需要,它会自动删除所有的子节点。

 

 读取数据

 (一)、getChildren

  •  List<String> getChildren(String path)

 (二)、getData

  •  <T extends Object> T readData(String path)
  •  <T extends Object> T readData(String path,boolean returnNullIfPathNotExists)
  •  <T extends Object> T readData(String path,Stat stat)

 这里说一下 returnNullIfPathNotExists,原生 API 读取数据,如果 path 不存在就会报错,这里设置 returnNullIfPathNotExists 为 true 则不会报错,会返回 null。

 

 更新数据

  •  void writeData(String path,Object data)
  •  void writeData(final String path,Object data,final int expectedVersion)

 

 检测节点是否存在

  •  boolean exists(final String path)

 

 谢谢大家观看!

posted @   香农随笔  阅读(1733)  评论(0编辑  收藏  举报
编辑推荐:
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp
· drools 规则引擎和 solon-flow 哪个好?solon-flow 简明教程
点击右上角即可分享
微信分享提示