ZKClient操作zookeeper
前面简单研究了curator的使用,下面简单研究zkclient的使用。
1.创建连接
private static final String CONNECT_ADDR = "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"; private static ZkClient geneClient() { return new ZkClient(new ZkConnection(CONNECT_ADDR), 10000); }
创建客户端的方法: ZKClient(Arguments)
参数1:zkServer zookeeper服务器的地址,用","分割
参数2:sessionTimeout超时回话,为毫秒,默认是30000ms
参数3:connectionTimeOut 连接超时会话
参数4:IZKConnection接口的实现类
参数5:zkSerializer 兹定于序列化实现
2.简单操作
1.创建节点
可以递归创建节点,只不过递归创建的节点值为空。
// 创建节点 geneClient.create("/test1", "sssss", CreateMode.PERSISTENT); // 递归创建节点,只是节点的值为空 geneClient.createPersistent("/test2/t22", true);
结果
创建方法如下:
2.删除节点
可以递归删除节点。
boolean delete = geneClient.delete("/test1"); // 递归删除 boolean deleteRecursive = geneClient.deleteRecursive("/test2");
3.获取节点内容和遍历子节点
Object readData = geneClient.readData("/test1"); System.out.println(readData); List<String> list = geneClient.getChildren("/test2"); for (String p : list) { System.out.println(p); String rp = "/test2/" + p; String data = geneClient.readData(rp); System.out.println("节点为:" + rp + ",内容为: " + data); }
4.判断节点是否存在
boolean exists = geneClient.exists("/test1"); System.out.println(exists);
5.修改节点
Stat writeData = geneClient.writeData("/test1", "cccc");
System.out.println(writeData);
System.out.println(geneClient.readData("/test1"));
3.监听节点
1.监听节点变化
geneClient.subscribeDataChanges("/test1", new IZkDataListener() { @Override public void handleDataDeleted(String dataPath) throws Exception { System.out.println("节点被删除"); } @Override public void handleDataChange(String dataPath, Object data) throws Exception { System.out.println(dataPath + "\t" + data); } });
2.监听子节点变化(只能监听字节点,子孙节点无效)
geneClient.subscribeChildChanges("/test1", new IZkChildListener() { @Override public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception { System.out.println(parentPath+"\t"); for(String s:currentChilds){ System.out.println(s); } } });
【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】