设为首页 收藏本站
查看: 1457|回复: 0

[经验分享] zookeeper的简单使用

[复制链接]

尚未签到

发表于 2015-9-5 14:18:26 | 显示全部楼层 |阅读模式
  前言

  
  最近项目中要使用基于zookeeper的集中配置管理系统,而对于zookeeper仅在当初使用阿里开源分布式服务调用框架dubbo时简单的了解一下。本
  文的主要目的,调用zkclient (maven 地址见下面)实现监听当某个节点的数据发生变化时,将变化的信息打印到控制台。
  zkclient的maven地址



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

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防火墙。
DSC0001.png

运行程序

  
  运行 master app和slave app 两个应用程序,截图如下:
DSC0002.png
  
DSC0003.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109803-1-1.html 上篇帖子: Zookeeper 初体验之——JAVA实例 下篇帖子: zookeeper Watcher API 说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表