Hello,朋友们。我又来了。此次和你们分享下Zookeeper的一个综合练习!!!算是对这几天学习zookeeper的一个小总结。java
一块儿学习,一块儿进步。继续沉淀,慢慢强大。但愿这文章对您有帮助。如有写的很差的地方,欢迎评论给建议哈!apache
初写博客不久,我是杨展浩。这是个人第十篇博客。加油!!!服务器
首先就是开启zookeeper的集群服务,在此就再也不重复演示zookeeper集群服务搭建以及启动了。能够参考博主的上一篇zookeeper文章:http://www.javashuo.com/article/p-navgkcst-go.html。学习
zookeeper集群服务启动的效果图:测试
zookeeper集群服务启动成功后,就编写项目代码:spa
编写zookeeper服务端的代码:DistributeServer.java.net
package com.java8090.zookeeper; import org.apache.zookeeper.*; import java.io.IOException; public class DistributeServer { public static void main(String[] args) throws Exception { DistributeServer server = new DistributeServer(); // 建立zookeeper链接对象实例 server.initZookeeperClient(); // 向zookeeper集群注册服务信息(建立节点而且写入对应的节点数据) server.registerServerInfo(args[0]); // 处理业务逻辑代码(测试就写成线程休眠) server.handleService(); } // 链接zookeeper集群服务的信息 IP:端口 private String zookeeperClusterInfo = "192.168.100.72:2181,192.168.100.73:2181,192.168.100.74:2181"; // 链接zookeeper集群服务超时时间 40s private int connectTimeout = 40000; private ZooKeeper zooKeeper; private void initZookeeperClient() throws IOException { zooKeeper = new ZooKeeper(zookeeperClusterInfo, connectTimeout, (watchedEvent) -> { // 监听集群中存在服务状态发生变化,进行相应处理 }); } private void registerServerInfo(String arg) throws KeeperException, InterruptedException { System.out.println("传入的数据:"+ arg); String zNode = zooKeeper.create("/servers/server", arg.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); System.out.println("建立的节点信息:" + zNode); } private void handleService() throws InterruptedException { Thread.sleep(Long.MAX_VALUE); } }
编写zookeeper客户端的代码:DistributeClient.java线程
package com.java8090.zookeeper; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.ZooKeeper; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class DistributeClient { public static void main(String[] args) throws Exception { DistributeClient server = new DistributeClient(); // 建立zookeeper链接对象实例 server.initZookeeperClient(); // 获取指定节点的节点数据 server.getChildren(); // 处理业务逻辑代码(测试就写成线程休眠) server.handleService(); } // 链接zookeeper集群服务的信息 IP:端口 private String zookeeperClusterInfo = "192.168.100.72:2181,192.168.100.73:2181,192.168.100.74:2181"; // 链接zookeeper集群服务超时时间 60s private int connectTimeout = 60000; private ZooKeeper zooKeeper; private void initZookeeperClient() throws IOException { zooKeeper = new ZooKeeper(zookeeperClusterInfo, connectTimeout, watchedEvent -> { // 监听集群中存在服务状态发生变化,进行相应处理 try { getChildren(); } catch (KeeperException | InterruptedException e) { e.printStackTrace(); } }); } private void getChildren() throws KeeperException, InterruptedException { List<String> zNodeInfoList = new ArrayList<>(); List<String> zNodeList = zooKeeper.getChildren("/servers", true); for(String zNode : zNodeList){ String zNodeInfo = new String(zooKeeper.getData("/servers/" + zNode, false, null)); zNodeInfoList.add(zNodeInfo); } System.out.println(zNodeInfoList); } private void handleService() throws InterruptedException { Thread.sleep(Long.MAX_VALUE); } }
先在虚拟机的集群服务器中其中一台服务器启动客户端,建立一个节点 /servers 。3d
而后启动写好的zookeeper客户端代码 - - DistributeClient.javacode
客户端程序启动成功后,进行zookeeper集群服务监听。而且在虚拟机中其中一台服务器进行客户端链接,依次建立节点、删除节点。效果图以下:
在zookeeper集群中,客户端建立节点成功、删除节点的同时,程序也成功监听到节点数据的更新。同时打印出控制台。手动经过客户端建立节点、删除节点成功!!!
而后启动一个写好的zookeeper服务端代码 - - DistributeServer.java
因为代码,我配置了是经过args进行传输传递,所以须要配置一下传入的参数:
同时一直监听zookeeper集群服务的客户端程序也收到相应的节点更新通知:
经过程序也实现zookeeper集群的正常建立节点、删除节点。
到此和你们分享的zookeeper技术学习就分享完啦。后面若是项目整合到zookeeper,博主踩了坑才和大伙分享!!!
学习是一个枯燥的过程,只要你肯坚持,必定能学到东西。你天天的一点点进步,虽然看不出什么变化,可是积累下来以后,回头看下,你会发现,其实你已经积累了这么多东西。加油吧,努力学,时间会见证你的付出!!!