1、配置过程,参见http://blog.csdn.net/morning99/article/details/40426133
2、测试代码如下
import java.io.IOException; import java.util.List; import java.util.concurrent.CountDownLatch; 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; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.data.Stat; import common.Logger; /** * zoo管理类 * @author bla * */ public class ZooManager implements Watcher { public ZooKeeper zooKeeper; private static final int SESSION_TIME_OUT = 6000; private CountDownLatch countDownLatch = new CountDownLatch(1); /** * 连接zookeeper * * @param host * @throws IOException * @throws InterruptedException */ public void connectZookeeper(String host) throws IOException, InterruptedException { zooKeeper = new ZooKeeper(host, SESSION_TIME_OUT, this); countDownLatch.await(); System.out.println("zookeeper connect ok"); } /** * 实现watcher的接口方法,当连接zookeeper成功后,zookeeper会通过此方法通知watcher * 此处为如果接受到连接成功的event,则countDown,让当前线程继续其他事情。 */ @Override public void process(WatchedEvent event) { if (event.getState() == Event.KeeperState.SyncConnected) { System.out.println("watcher received event"); countDownLatch.countDown(); } } /** * 根据路径创建节点,并且设置节点数据 * * @param path * @param data * @return * @throws KeeperException * @throws InterruptedException */ public String createNode(String path, byte[] data) throws KeeperException, InterruptedException { return this.zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } /** * 根据路径获取所有孩子节点 * * @param path * @return * @throws KeeperException * @throws InterruptedException */ public List<String> getChildren(String path) throws KeeperException, InterruptedException { return this.zooKeeper.getChildren(path, false); } public Stat setData(String path, byte[] data, int version) throws KeeperException, InterruptedException { return this.zooKeeper.setData(path, data, version); } /** * 根据路径获取节点数据 * * @param path * @return * @throws KeeperException * @throws InterruptedException */ public byte[] getData(String path) throws KeeperException, InterruptedException { return this.zooKeeper.getData(path, false, null); } /** * 删除节点 * * @param path * @param version * @throws InterruptedException * @throws KeeperException */ public void deletNode(String path, int version) throws InterruptedException, KeeperException { this.zooKeeper.delete(path, version); } /** * 关闭zookeeper连接 * * @throws InterruptedException */ public void closeConnect() throws InterruptedException { if (null != zooKeeper) { zooKeeper.close(); } } private static Logger logger = Logger.getLogger(ZooManager.class); public static void main(String[] args) { try { ZooManager baseZookeeper = new ZooManager(); String host = "127.0.0.1:2182,127.0.0.1:2183"; // 连接zookeeper baseZookeeper.connectZookeeper(host); System.out.println("--------connect zookeeper ok-----------"); // 创建节点 /*byte [] data = {1, 2, 3, 4, 5}; String result = baseZookeeper.createNode("/test", data); System.out.println(result); System.out.println("--------create node ok-----------");*/ // 获取某路径下所有节点 List<String> children = baseZookeeper.getChildren("/"); for (String child : children) { logger.info(child); } logger.info("--------get children ok-----------"); // 获取节点数据 /* byte [] nodeData = baseZookeeper.getData("/test"); logger.info(new String(nodeData,"UTF-8")); logger.info("--------get node data ok-----------");*/ // 更新节点数据 byte[] data = "测试".getBytes("UTF-8"); baseZookeeper.createNode("/test", data);//版本号为当前的版本 System.out.println("--------set node data ok-----------"); byte[] nodeData = baseZookeeper.getData("/test"); System.out.println(new String(nodeData,"UTF-8")); System.out.println("--------get node new data ok-----------"); baseZookeeper.closeConnect(); System.out.println("--------close zookeeper ok-----------"); } catch (Exception e) { e.printStackTrace(); logger.error("...zookeeper操作出错....",e); } } }