• 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 两个应用程序,截图如下:

  • 相关阅读:
    Android基于HttpUrlConnection类的文件下载
    Android的HttpUrlConnection类的GET和POST请求
    react修改静态文件根目录
    多维数组扁平化一维数组
    手把手教你实现三种绑定方式(call、apply、bind)
    css——圣杯布局
    错误码:events.js:183 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE :::8081
    怎么把本地项目和远程git仓库相连通
    toFixed奇葩问题
    HTML5浏览器端图片预览&生成Base64
  • 原文地址:https://www.cnblogs.com/yql1986/p/4116483.html
Copyright © 2020-2023  润新知