zoukankan      html  css  js  c++  java
  • 基于zookeeper实现配置集中管理【转】

    基于ZK的优点:

    1. 简单。尽管前期搭建ZooKeeper服务器集群较为麻烦,但是实现该方案后,修改配置整个过程变得简单很多。用户只要修改配置,无需进行其他任何操作,配置自动生效
    2. 可靠。ZooKeeper服务集群具有无单点失效的特性,使整个系统更加可靠。即使ZooKeeper 集群中的一台机器失效,也不会影响整体服务,更不会影响分布式应用配置信息的更新。
    3. 实时。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 两个应用程序,截图如下:

  • 相关阅读:
    从数据库表导出为excel表格
    特别好用的eclipse快捷键
    Oracle安装后出现的问题
    Linux系统(X32)安装Oracle11g完整安装图文教程另附基本操作
    Java导出引用jar包的文件
    poi读取、通过poi导出数据库的记录到excl表
    Oracle数据库体系结构(7) 表空间管理1
    Oracle数据库体系结构(6)数据库归档重做日志文件管理
    5 重做日志文件
    Oracle数据库体系结构(4)oracle控制文件
  • 原文地址:https://www.cnblogs.com/lnas01/p/5351447.html
Copyright © 2011-2022 走看看