以下为一个完整JAVA操作Zookeeper项目步骤:
1. 项目中pom.xml中添加需要的依赖jar包信息
org.apache.zookeeper
zookeeper
3.4.9
com.101tec
zkclient
0.10
2. 在resource下添加log4j.properties日志打印信息
log4j.rootLogger=DEBUG,myConsole
log4j.appender.myConsole=org.apache.log4j.ConsoleAppender
log4j.appender.myConsole.ImmediateFlush=truelog4j.appender.myConsole.Target=System.out
log4j.appender.myConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.myConsole.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
3. 使用Java代码操作Zookeeper
包括创建节点、设置节点值、获取节点值、判断节点是否存在
创建节点时,存在四种模式:(即在createZKNode方法中)
1. CreateMode.PERSISTENT :持久节点,一旦创建就保存到硬盘上面
2. CreateMode.SEQUENTIAL : 顺序持久节点
3. CreateMode.EPHEMERAL :临时节点,创建以后如果断开连接则该节点自动删除
4. CreateMode.EPHEMERAL_SEQUENTIAL :顺序临时节点
创建ZKOperaDemo.java类:
packagecom.hxc.zookeeperDemo;importjava.io.IOException;importjava.util.ArrayList;importorg.apache.zookeeper.CreateMode;importorg.apache.zookeeper.KeeperException;importorg.apache.zookeeper.WatchedEvent;importorg.apache.zookeeper.Watcher;importorg.apache.zookeeper.ZooKeeper;importorg.apache.zookeeper.data.ACL;importorg.apache.zookeeper.data.Stat;importorg.apache.zookeeper.ZooDefs.Ids;/***
*@authorsun_flower
**/
public classZKOperaDemo {private static String connectString = "192.168.202.132:2181";private static int sessionTimeout = 50 * 1000;/*** 连接Zookeeper服务器
*@return*@throwsIOException*/
public ZooKeeper connectionZooKeeper() throwsIOException {
ZooKeeper zooKeeper= new ZooKeeper(connectString, sessionTimeout, newWatcher() {public voidprocess(WatchedEvent event) {//可做其他操作(设置监听或观察者)
}
});returnzooKeeper;
}/*** 创建节点
* 1. CreateMode.PERSISTENT :持久节点,一旦创建就保存到硬盘上面
2. CreateMode.SEQUENTIAL : 顺序持久节点
3. CreateMode.EPHEMERAL :临时节点,创建以后如果断开连接则该节点自动删除
4. CreateMode.EPHEMERAL_SEQUENTIAL :顺序临时节点
*@paramzooKeeper Zookeeper已经建立连接的对象
*@parampath 要创建节点的路径
*@paramdata 该节点上的数据
*@return返回创建的节点的路径
*@throwsKeeperException
*@throwsInterruptedException*/
public String createZKNode(ZooKeeper zooKeeper, String path, String data) throwsKeeperException, InterruptedException {byte[] bytesData =data.getBytes();//访问控制列表
ArrayList openAclUnsafe =Ids.OPEN_ACL_UNSAFE;//创建模式
CreateMode mode =CreateMode.PERSISTENT;String result=zooKeeper.create(path, bytesData, openAclUnsafe, mode);
System.out.println("创建节点成功: " +result);returnresult;
}/*** 获取节点上的数据
*@paramzooKeeper Zookeeper已经建立连接的对象
*@parampath 节点路径
*@return返回节点上的数据
*@throwsKeeperException
*@throwsInterruptedException*/
public String getZKNodeData(ZooKeeper zooKeeper, String path) throwsKeeperException, InterruptedException {byte[] data = zooKeeper.getData(path, false, newStat());//System.out.println("该节点" + path + "上的数据伟: " + new String(data));
return newString(data);
}/*** 设置节点上的数据
*@paramzooKeeper Zookeeper已经建立连接的对象
*@parampath 节点路径
*@paramdata
*@return*@throwsKeeperException
*@throwsInterruptedException*/
public Stat setZKNodeData(ZooKeeper zooKeeper, String path, String data) throwsKeeperException, InterruptedException {return zooKeeper.setData(path, data.getBytes(), -1);
}/*** 判断节点是否存在
*@paramzooKeeper
*@parampath 节点路径
*@return*@throwsKeeperException
*@throwsInterruptedException*/
public Stat isExitZKPath(ZooKeeper zooKeeper, String path) throwsKeeperException, InterruptedException {
Stat stat= zooKeeper.exists(path, false);returnstat;
}
}
4. 测试代码TestZK.java
1)测试连接是否成功:
//1.测试连接是否成功
@Testpublic void testConnection() thr