zookeeper 与 java 交互小结
来源:互联网 发布:windows pe系统是什么 编辑:程序博客网 时间:2024/05/16 01:27
不多说,直接上代码。关于zookeeper 的一些介绍和场景,会过一段时间总结发出来。这里是java 操作zookeeper 的api。默认已经在本机安装好了zookeeper 的server
pom.xml 如下
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency>
客户端代码如下
package com.us.zookeeper;import java.io.IOException;import java.util.List;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.data.Stat;/** * * @author abel * */public class ZkClient2 { private static ZooKeeper zk = null; /** * * @param zkHost * @param timeOut * @throws Exception */ public static void createConnection(String zkHost, int timeOut) { try { zk = new ZooKeeper(zkHost, timeOut, new Watcher() { // 监控所有被触发的事件 public void process(WatchedEvent event) { System.out.println("连接成功,已经触发了" + event.getType() + "事件!"); } }); } catch (IOException e) { System.out.println("连接失败,请检查zookeeper的地址是否正确"); e.printStackTrace(); } } /** * 创建节点和创建子节点的区别在于nodePath 创建节点 nodePath 为 "/nodeFather" 创建其子节点时 nodePath * 为"/nodeFather/nodeSon" * 1.CreateMode 取值 * PERSISTENT:持久化,这个目录节点存储的数据不会丢失 * PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加 1,然后返回给客户端已经成功创建的目录节点名; * EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是 session过期超时,这种节点会被自动删除 * EPHEMERAL_SEQUENTIAL:临时自动编号节点 * @param nodePath * @param nodeData */ public static void creatNode(String nodePath, String nodeData) { try { zk.create(nodePath, nodeData.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println("创建节点" + nodePath + "成功,节点内容为:" + nodeData); } catch (KeeperException e) { System.out.println("创建节点已经存在,创建失败。"); e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } /** * nodePath 为需要读取节点的路径 * * @param nodePath */ public static void readNode(String nodePath) { try { System.out.println(nodePath + "节点内容为" + new String(zk.getData(nodePath, false, null))); } catch (KeeperException e) { System.out.println("读取的节点" + nodePath + "节点不存在!!"); e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 查询当前节点下的子节点个数 * @param path */ public static void getChild(String path) { List<String> list; try { list = zk.getChildren(path, false); if(list.isEmpty()){ System.out.println(path+"中没有子节点"); }else{ System.out.println(path+"中存在子节点"); for(String child:list){ System.out.println("子节点为:"+child); } } } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 判断当前路径节点是否存在 * @param nodePath * @return Stat为zookeeper的一个对象 */ public static Stat isExists( String nodePath) { Stat stat=null; try { stat=zk.exists(nodePath, true); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return stat; } /** * 此处的nodePath也可以是子节点也可以是父亲节点路径 * * @param nodePath * @param modifyNodeData * 更新后的数据 */ public static void updateNode(String nodePath, String modifyNodeData) { try { zk.setData(nodePath, modifyNodeData.getBytes(), -1); System.out.println("更新节点" + nodePath + "的数据为" + modifyNodeData); } catch (KeeperException e) { System.out.println("更新的节点" + nodePath + "节点不存在!!"); e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 删除节点 * * @param nodePath * 删除节点的路径,可以是父亲节点也可以是子节点 * */ public static void deleteNode(String nodePath) { try { zk.delete(nodePath, -1); System.out.println("删除" + nodePath + "节点成功"); } catch (InterruptedException e) { e.printStackTrace(); } catch (KeeperException e) { System.out.println("删除失败,删除的节点不存在或没有删除子节点直接删除父节点,没有节点被删除"); e.printStackTrace(); } } /** * 关闭节点 */ public static void closeConnection() { try { zk.close(); System.out.println("关闭连接"); } catch (InterruptedException e) { e.printStackTrace(); } } /** * main测试使用 * * @param args */ public static void main(String[] args) { String nodePath = "/abel"; String sonNodePath = "/abel/son"; String zkHost = "localhost:2181"; int timeOut = 1000; try { createConnection(zkHost, timeOut); creatNode(nodePath, "我是第一个节点"); readNode(nodePath); if(isExists(nodePath)!=null) { System.out.println(nodePath+"节点存在"); }else{ System.out.println(nodePath+"节点不存在"); } updateNode(nodePath, "我不想做第一个节点了,我想变化一下"); creatNode(sonNodePath, "我是子节点"); readNode(sonNodePath); getChild(nodePath); updateNode(sonNodePath, "我是子节点,我想改变一下自己"); deleteNode(sonNodePath); deleteNode(nodePath); closeConnection(); } catch (Exception e) { e.printStackTrace(); } }}
0 0
- zookeeper 与 java 交互小结
- dubbo与zookeeper交互-3
- android webview用法小结2 java与javascript的交互
- android webview用法小结2 java与javascript的交互
- android webview用法小结2 java与javascript的交互
- android webview用法小结2 java与javascript的交互
- dubbo与zookeeper的交互-1
- dubbo与zookeeper的交互-2
- JAVA和Zookeeper交互的初级代码
- Java RMI 与Zookeeper
- zookeeper 小结
- android WebView与JS交互小结
- java 与 XML 交互
- VB与JAVA交互
- flex4与Java交互
- flex4与Java交互
- flex4与Java交互
- java与matlab交互
- IOS-响应式编程
- php中header函数参数的Cache-control:private,no-cache,must-revalidate,max-age是使用方法!
- 利用Access-Control-Allow-Origin响应头解决跨域请求
- 实习杂记(31):android多dex方案三
- 【动画1】UIView动画
- zookeeper 与 java 交互小结
- easyUI与bootstrap制作表单dialog
- 关于函数声明
- 应用图片的细节
- CodeForces 686C Robbers' watch
- RelativeLayout和LinearLayout
- Poj 2516 Minimum Cost【费用流Min_Cost_Max_flow】
- leetcode:字符串之Valid Palindrome && Palindrome Number
- JavaScript检测字符串中是否有空格