您的位置:首页 > 其它

基于zookeeper实现配置集中管理【转】

2016-04-04 10:10 399 查看
基于ZK的优点:

简单。尽管前期搭建ZooKeeper服务器集群较为麻烦,但是实现该方案后,修改配置整个过程变得简单很多。用户只要修改配置,无需进行其他任何操作,配置自动生效。

可靠。ZooKeeper服务集群具有无单点失效的特性,使整个系统更加可靠。即使ZooKeeper 集群中的一台机器失效,也不会影响整体服务,更不会影响分布式应用配置信息的更新。

实时。ZooKeeper的数据更新通知机制,可以在数据发生变化后,立即通知给分布式应用程序,具有很强的变化响应能力。

转自:http://www.cnblogs.com/yql1986/p/4116483.html

最近项目中要使用基于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 两个应用程序,截图如下:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: