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,博主踩了坑才和大夥分享!!!
學習是一個枯燥的過程,只要你肯堅持,必定能學到東西。你天天的一點點進步,雖然看不出什麼變化,可是積累下來以後,回頭看下,你會發現,其實你已經積累了這麼多東西。加油吧,努力學,時間會見證你的付出!!!