zookeeper的簡單使用


前言


 

最近項目中要使用基於zookeeper的集中配置管理系統,而對於zookeeper僅在當初使用阿里開源分布式服務調用框架dubbo時簡單的了解一下。本

文的主要目的,調用zkclient (maven 地址見下面)實現監聽當某個節點的數據發生變化時,將變化的信息打印到控制台。

zkclient的maven地址

<dependency>
 <groupId>com.101tec</groupId>
 <artifactId>zkclient</artifactId>
 <version>0.4</version>
</dependency>

master app 應用程序


 

編寫 master app應用程序,該程序主要功能是創建一個"root1"的節點,並每20s改變該節點的數據。程序代碼如下:

 1 import java.util.UUID;
 2 
 3 import org.I0Itec.zkclient.ZkClient;
 4 import org.apache.zookeeper.CreateMode;
 5 
 6 
 7 public class App {
 8     
 9     private ZkClient zkClient;
10     
11     public ZkClient getZkClient() {
12         return zkClient;
13     }
14 
15     public void setZkClient(ZkClient zkClient) {
16         this.zkClient = zkClient;
17     }
18 
19 
20     /**
21      * 函數入口
22      * @param args
23      */
24     public static void main( String[] args ) {
25        
26         App bootStrap=new App();
27         bootStrap.initialize();
28         
29         try {
30             Thread.sleep(100000000);
31         } catch (InterruptedException e) {
32             e.printStackTrace();
33         }
34             
35     }
36     
37   
38     /**
39      * 初始化zookeeper
40      */
41     public void initialize() {
42         
43         String connectionString="192.168.19.128:2181";
44         int connectionTimeout=50000;
45         
46         zkClient=new ZkClient(connectionString, connectionTimeout);
47         
48         if(!zkClient.exists("/root1")) {
49             zkClient.create("/root1", new Long(System.currentTimeMillis()), CreateMode.EPHEMERAL);
50         }
51             
52         new Thread(new RootNodeChangeThread()).start();
53     }
54     
55     /**
56      * 每20s改變一次 'root1'節點的數據
57      * @author yang
58      *
59      */
60     private class RootNodeChangeThread implements Runnable{
61 
62         public void run() {
63             
64             while(true) {
65             
66                 try {
67                     Thread.sleep(20000);
68                 } catch (InterruptedException e) {
69                     //ignore
70                 }
71                 
72                 String uuidStr=UUID.randomUUID().toString();    
73                 
74                 System.out.println(">>>>>>>>>> 產生隨機的 uuid string,'uuidStr'===>"+uuidStr);
75                 
76                 zkClient.writeData("/root1", uuidStr);
77                 
78             }
79             
80         }
81         
82     }
83 }

slave app應用程序


 

編寫 slave app應用程序,該程序主要功能是監聽"root1"的節點,當其數據發生變化時,在控制台中打印中相關信息。程序代碼如下:

 1 import org.I0Itec.zkclient.IZkDataListener;
 2 import org.I0Itec.zkclient.ZkClient;
 3 
 4 public class App {
 5     
 6     private ZkClient zkClient;
 7     
 8     public ZkClient getZkClient() {
 9         return zkClient;
10     }
11 
12     public void setZkClient(ZkClient zkClient) {
13         this.zkClient = zkClient;
14     }
15 
16     /**
17      * 初始化zookeeper
18      */
19     public void initialize() {
20         
21         String connectionString="192.168.19.128:2181";
22         int connectionTimeout=500000;
23         
24         zkClient=new ZkClient(connectionString, connectionTimeout);
25         
26         new Thread(new Runnable() {
27             
28             public void run() {
29             
30                 zkClient.subscribeDataChanges("/root1", new IZkDataListener() {
31                     
32                     public void handleDataDeleted(String dataPath) throws Exception {
33                         System.out.println("the node 'dataPath'===>");    
34                     }
35                     
36                     public void handleDataChange(String dataPath, Object data) throws Exception {
37                         System.out.println("the node 'dataPath'===>"+dataPath+", data has changed.it's data is "+String.valueOf(data));
38                         
39                     }
40                 });
41                 
42             }
43             
44         }).start();
45     }
46     
47     /**
48      * 函數入口
49      * @param args
50      */
51     public static void main( String[] args ) {
52        
53         App bootStrap=new App();
54         bootStrap.initialize();
55         
56         try {
57             Thread.sleep(100000000);
58         } catch (InterruptedException e) {
59             e.printStackTrace();
60         }
61             
62     }
63 }

環境准備


 

啟動zookeeper,並關閉linux防火牆。

運行程序


 

運行 master app和slave app 兩個應用程序,截圖如下:

 


免責聲明!

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



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