分佈式技術 -- 八、ZooKeeper的綜合練習

    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,博主踩了坑才和大夥分享!!!

    學習是一個枯燥的過程,只要你肯堅持,必定能學到東西。你天天的一點點進步,雖然看不出什麼變化,可是積累下來以後,回頭看下,你會發現,其實你已經積累了這麼多東西。加油吧,努力學,時間會見證你的付出!!!

相關文章
相關標籤/搜索