diff --git a/README.MD b/README.MD index 08ba771..f5f828e 100644 --- a/README.MD +++ b/README.MD @@ -67,5 +67,9 @@ SpringDataRedis学习的一个Demo,内容不多,配合博文:[redis学习记录( -------------- 增加Spring Security Demo,项目中使用了JWT Token验证机制,该项目可以很好的了解整个流程的作用,需要配合我博客中Spring Security相关博文食用. -16.待添加 +16.ZkClient-Demo +-------------- +对于zk的基本操作测试与分析,主要是了解zk的工作模式. + +17.待添加 -------------- diff --git a/ZkClient-Demo/pom.xml b/ZkClient-Demo/pom.xml new file mode 100644 index 0000000..c4b15c9 --- /dev/null +++ b/ZkClient-Demo/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + cn.mrdear.zkclient + ZkClient-Demo + 1.0-SNAPSHOT + + + + + + + com.101tec + zkclient + 0.10 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/ZkClient-Demo/src/main/java/cn/mrdear/zkclient/conf/ZkClientConf.java b/ZkClient-Demo/src/main/java/cn/mrdear/zkclient/conf/ZkClientConf.java new file mode 100644 index 0000000..d6bc763 --- /dev/null +++ b/ZkClient-Demo/src/main/java/cn/mrdear/zkclient/conf/ZkClientConf.java @@ -0,0 +1,13 @@ +package cn.mrdear.zkclient.conf; + +/** + * @author Niu Li + * @since 2017/8/18 + */ +public class ZkClientConf { + + public static final String zkHost = "106.15.93.73:2181"; + + public static final Integer zkTimeOut = 2000; + +} diff --git a/ZkClient-Demo/src/main/java/cn/mrdear/zkclient/tec101/ZkClientCrudExample.java b/ZkClient-Demo/src/main/java/cn/mrdear/zkclient/tec101/ZkClientCrudExample.java new file mode 100644 index 0000000..d5b78ce --- /dev/null +++ b/ZkClient-Demo/src/main/java/cn/mrdear/zkclient/tec101/ZkClientCrudExample.java @@ -0,0 +1,40 @@ +package cn.mrdear.zkclient.tec101; + +import org.I0Itec.zkclient.ZkClient; + +import cn.mrdear.zkclient.conf.ZkClientConf; + +import java.util.List; + +/** + * 连接zk demo + * @author Quding Ding + * @since 2017/8/18 + */ +public class ZkClientCrudExample { + + private static final ZkClient ZK_CLIENT = new ZkClient(ZkClientConf.zkHost, ZkClientConf.zkTimeOut); + + /** + * 创建节点,节点存在则抛异常,一次只能创建一个目录节点,否则报错 + * @param path 路径 + * @param value 节点携带的数据 + */ + public void createNode(String path, String value) { + ZK_CLIENT.createPersistent(path, value); + } + + /** + * 得到子节点,节点不存在直接报错 + * @param root 查找子节点 + */ + public List children(String root) { + return ZK_CLIENT.getChildren(root); + } + + public static void main(String[] args) { + ZkClientCrudExample example = new ZkClientCrudExample(); + example.createNode("/quding/nameService","命名服务"); + } + +} diff --git a/ZkClient-Demo/src/main/java/cn/mrdear/zkclient/tec101/zkClientNameServiceExample.java b/ZkClient-Demo/src/main/java/cn/mrdear/zkclient/tec101/zkClientNameServiceExample.java new file mode 100644 index 0000000..0a9f295 --- /dev/null +++ b/ZkClient-Demo/src/main/java/cn/mrdear/zkclient/tec101/zkClientNameServiceExample.java @@ -0,0 +1,35 @@ +package cn.mrdear.zkclient.tec101; + +import org.I0Itec.zkclient.ZkClient; + +import cn.mrdear.zkclient.conf.ZkClientConf; + +/** + * zk的命名服务,参考博文 http://www.hollischuang.com/archives/1595 + * @author Quding Ding + * @since 2017/8/19 + */ +public class zkClientNameServiceExample { + + private static final ZkClient ZK_CLIENT = new ZkClient(ZkClientConf.zkHost, ZkClientConf.zkTimeOut); + + + private static final String nameServicePath = "/quding/nameService/name"; + + /** + * 每次拿到id都需要创建相应的节点,再删除,适合读多写少的环境下 + * @return id + */ + public Long getUUID() { + final String sequential = ZK_CLIENT.createPersistentSequential(nameServicePath, "id"); + ZK_CLIENT.delete(sequential); + return Long.valueOf(sequential.substring(nameServicePath.length())); + } + + + public static void main(String[] args) { + zkClientNameServiceExample example = new zkClientNameServiceExample(); + System.out.println(example.getUUID()); + } + +} diff --git a/ZkClient-Demo/src/main/resources/log4j.xml b/ZkClient-Demo/src/main/resources/log4j.xml new file mode 100644 index 0000000..357f626 --- /dev/null +++ b/ZkClient-Demo/src/main/resources/log4j.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file