一、项目简介
该项目通过zookeeper三个节点Node服务客户端代码,实现zookeeper集群管理与Master选举功能示例,项目结构如下图所示,其中依赖包包含:log4j-1.2.14.jar、slf4j-api-1.7.2.jar、slf4j-log4j12-1.7.2.jar、zookeeper-3.4.0-test.jar、zookeeper-3.4.6.jar。
二、代码示例package com.xwood.zookeeper;@b@@b@import org.apache.zookeeper.CreateMode;@b@import org.apache.zookeeper.KeeperException;@b@import org.apache.zookeeper.WatchedEvent;@b@import org.apache.zookeeper.Watcher;@b@import org.apache.zookeeper.Watcher.Event.EventType;@b@import org.apache.zookeeper.ZooDefs.Ids;@b@import org.apache.zookeeper.ZooKeeper;@b@ @b@public class Node1 implements Watcher{@b@@b@ZooKeeper zk;@b@String hostPort;@b@String znode;@b@@b@public Node1(String hostPort,String znode) throws Throwable{@b@this.hostPort = hostPort;@b@this.znode = znode;@b@@b@zk = new ZooKeeper(hostPort, 3000, this);@b@try {@b@//每个客户端都创建同一个节点,如果创建成功,则该客户端是master@b@zk.create(znode, "node1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);@b@System.out.println("master节点是:node1");@b@} catch (KeeperException.NodeExistsException e) {@b@//如果抛出节点存在的异常,则master已经存在,在该节点上添加watcher@b@System.out.println("master节点是:" + new String(zk.getData(znode, false, null)));@b@zk.exists(znode, true);@b@}@b@@b@}@b@ @b@public void process(WatchedEvent event) {@b@try {@b@@b@if (event.getType() == EventType.NodeDeleted) {@b@try {@b@zk.create(znode, "node1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);@b@System.out.println("master节点是:node1");@b@} catch (KeeperException.NodeExistsException e) {@b@System.out.println("master节点是:" + new String(zk.getData(znode, false, null)));@b@zk.exists(znode, true);@b@}@b@}@b@@b@} catch (KeeperException e) {@b@e.printStackTrace();@b@} catch (InterruptedException e) {@b@e.printStackTrace();@b@}@b@@b@}@b@ @b@public static void main(String[] args) throws Throwable {@b@new Node1("192.168.1.102:2181", "/test");@b@@b@System.in.read();@b@}@b@}