java使用zookeeper选择master

it2023-05-28  73

1 添加依赖

<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.2</version> </dependency>

2 Node.java

package com.clevercode.biz.webservice.controller; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event.EventType; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; public class Node implements Watcher { ZooKeeper zk; String hostPort; String znode; String data; public Node(String hostPort,String znode,String data) throws Throwable{ this.hostPort = hostPort; this.znode = znode; this.data = data; zk = new ZooKeeper(hostPort, 3000, this); try { //每个客户端都创建同一个节点,如果创建成功,则该客户端是master zk.create(znode, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); System.out.println("master节点是:" + data); } catch (KeeperException.NodeExistsException e) { //如果抛出节点存在的异常,则master已经存在,在该节点上添加watcher System.out.println("master节点是:" + new String(zk.getData(znode, false, null))); zk.exists(znode, true); } } public void process(WatchedEvent event) { try { if (event.getType() == EventType.NodeDeleted) { try { zk.create(znode, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); System.out.println("master节点是:" + data); } catch (KeeperException.NodeExistsException e) { System.out.println("master节点是:" + new String(zk.getData(znode, false, null))); zk.exists(znode, true); } } } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }

3 Node1.java

package com.clevercode.biz.webservice.controller; import com.clevercode.biz.webservice.controller.Node; public class Node1 { public static void main(String[] args) throws Throwable { new Node("192.168.56.100:2181,192.168.56.101:2181,192.168.56.102:2181", "/master","node1"); System.in.read(); } }

4 Node2.java

package com.clevercode.biz.webservice.controller; import com.clevercode.biz.webservice.controller.Node; public class Node2 { public static void main(String[] args) throws Throwable { new Node("192.168.56.100:2181,192.168.56.101:2181,192.168.56.102:2181", "/master","node2"); System.in.read(); } }

5 Node3.java

package com.clevercode.biz.webservice.controller; import com.clevercode.biz.webservice.controller.Node; public class Node3 { public static void main(String[] args) throws Throwable { new Node("192.168.56.100:2181,192.168.56.101:2181,192.168.56.102:2181", "/master","node3"); System.in.read(); } }

6 启动Node1,Node2,Node3

杀掉node1之后。

技术交流

CleverCode是一名架构师,技术交流,咨询问题,请加CleverCode创建的qq群(架构师俱乐部):517133582。加群和腾讯,阿里,百度,新浪等公司的架构师交流。【架构师俱乐部】宗旨:帮助你成长为架构师!

最新回复(0)