Zookeeper服務端的創建及簡單的客戶端創建節點


服務端創建

  服務端需要安裝在linux系統上,這里以CentOS7為例。

  1、進入Zookeeper官網下載Zookeeper鏡像。

  官網下載鏈接:http://mirror.bit.edu.cn/apache/zookeeper/

  建議選擇最新版

  

  選擇*********bin.tar.gz

  

 

  下載完成后是linux系統的壓縮包gz包

  

  下載后.gz文件,上傳到linux服務器中的/usr/local下

   

  解壓安裝

  命令: tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz 

  修改名字

  命令: mv apache-zookeeper-3.5.6-bin zookeeper-3.5.6

  進入解壓后文件夾

  命令:cd /usr/local/zookeeper-3.5.6

  創建 data 和 log 文件夾

  命令:  # mkdir data

       # mkdir log

  進入conf文件夾

  命令:cd /usr/local/zookeeper-3.5.6/conf

   

  修改文件名字為zoo.cfg

  命令:mv zoo_sample.cfg zoo.cfg

  編輯zoo.cfg文件

  命令:vim zoo.cfg

  修改dataDir路徑為:

  dataDir=/usr/local/zookeeper-3.5.6/data

  添加dataLogDir:

  dataLogDir=/usr/local/zookeeper-3.5.6/log

  保存並退出

  在路徑 /usr/local/zookeeper-3.5.6下開啟服務

  命令:bin/zkServer.sh start

   

   使用命令查詢狀態:bin/zkServer.sh status

   

 

客戶端鏈接測試

  先下載Zookeeper可視化工具ZooInspector下面是下載鏈接:

  https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

  軟件是壓縮包形式解壓后如下圖

  打開build

   

  運行jar文件

    

  打開后如下圖所示

  

   點擊開始按鈕(上圖中紅框內的按鈕)

  輸入:ip地址:端口號 比如 192.168.0.1:2181 默認端口號為2181 點擊ok 首次鏈接等待時間較長(注意!如果首次鏈接ip地址輸入錯誤,需要關閉軟件重新連接)

  

  連接成功后如下圖所示:wsl是作者創建的測試節點

  

java程序鏈接:

  首先引入所需依賴,maven依賴(或者找到相應jar包也可以)

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

  創建測試類

public class ZKDemo {
    /**
     * 連接URL
     */
    private static final String CONNECTSTRING = "localhost:2181";
    /**
     * SESSION超時時間
     */
    private static final int SESSIONTIMEOUT = 10000;
    /**
     * 計數器 構造一個用給定計數初始化的對象 參數int類型
     */
    private static CountDownLatch countDown = new CountDownLatch(1);
    /**
     * 創建ZooKeeper對象
     */
    static ZooKeeper zkClient = null;

    public static void init() throws Exception {
        /**
         * 參數1: 連接URL 參數2: Session超時時間 參數3: Watcher對象
         */
        zkClient = new ZooKeeper(CONNECTSTRING, SESSIONTIMEOUT, new Watcher() {

            public void process(WatchedEvent event) {
                KeeperState state = event.getState();
                if (state == state.SyncConnected) {
                    System.out.println("連接成功!");
                    
                    // countDown()方法 countDown-1
                    countDown.countDown();
                } else {
                    System.out.println("鏈接失敗!");
                }
                System.out.println(event.getType() + "---" + event.getPath());
            }

        });

        System.out.println("計數開始···");
        
        // await()方法 countDown為0時繼續執行
        countDown.await();
        
        System.out.println("計數結束···");
        
        /**
         * 設置權限(訪問規則)
         * 參數1:指權限類型
         *              world:任何人可以訪問
         *              auth:通過驗證后可以訪問
         *              digest:通過賬戶密碼訪問
         *              url:固定url可以訪問
         * 參數2:指用戶名和密碼 格式:username:password
         */
        Id id = new Id("digest",DigestAuthenticationProvider.generateDigest("username:password"));
        
        /**
         * 參數1:訪問范圍
         *      ALL:全部
         * 參數2:訪問規則
         */
        ACL a = new ACL(Perms.ALL,id);
        
        //設置訪問規則集合
        List<ACL> list = new ArrayList<ACL>();
        
        list.add(a);
        
        /**
         * 創建節點 
         *      參數1:節點名
         *      參數2:節點內容,需要轉為字節
         *      參數3:權限
         *              Ids.OPEN_ACL_UNSAFE:標識節點的接入權限
         *              或者選擇已經創建的List<ACL> 集合 list
         *      參數4:節點類型  瞬時指close后刪除
         *              PERSISTENT:持久態
         *              PERSISTENT_SEQUENTIAL:持久序列化態
         *              EPHEMERAL:瞬時態
         *              EPHEMERAL_SEQUENTIAL:序列化瞬時態
         */
        String create = zkClient.create("/wsl", "hellozk".getBytes(), list, CreateMode.PERSISTENT);
        System.out.println(create);
        /**
         * 讀取節點
         * 參數1:權限方式
         * 參數2:認證規則(賬號密碼)
         */
        zkClient.addAuthInfo("digest", "admin:123".getBytes());
        
        /**
         * 獲取數據
         * 參數1:讀取的路徑
         * 參數2:watcher對象
         * 參數3:Stat對象
         */
        byte[] data = zkClient.getData("/wsl", null, new Stat());
        
        System.out.println(new String(data));
        
        // 關閉
        zkClient.close();
    }

    public static void main(String[] args) throws Exception {
        init();
    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM