前言


最近项目中要使用基于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改变该节点的数据。程序代码如下:

 import java.util.UUID;

 import org.I0Itec.zkclient.ZkClient;
import org.apache.zookeeper.CreateMode; public class App { private ZkClient zkClient; public ZkClient getZkClient() {
return zkClient;
} public void setZkClient(ZkClient zkClient) {
this.zkClient = zkClient;
} /**
* 函数入口
* @param args
*/
public static void main( String[] args ) { App bootStrap=new App();
bootStrap.initialize(); try {
Thread.sleep(100000000);
} catch (InterruptedException e) {
e.printStackTrace();
} } /**
* 初始化zookeeper
*/
public void initialize() { String connectionString="192.168.19.128:2181";
int connectionTimeout=50000; zkClient=new ZkClient(connectionString, connectionTimeout); if(!zkClient.exists("/root1")) {
zkClient.create("/root1", new Long(System.currentTimeMillis()), CreateMode.EPHEMERAL);
} new Thread(new RootNodeChangeThread()).start();
} /**
* 每20s改变一次 'root1'节点的数据
* @author yang
*
*/
private class RootNodeChangeThread implements Runnable{ public void run() { while(true) { try {
Thread.sleep(20000);
} catch (InterruptedException e) {
//ignore
} String uuidStr=UUID.randomUUID().toString(); System.out.println(">>>>>>>>>> 产生随机的 uuid string,'uuidStr'===>"+uuidStr); zkClient.writeData("/root1", uuidStr); } } }
}

slave app应用程序


编写 slave app应用程序,该程序主要功能是监听"root1"的节点,当其数据发生变化时,在控制台中打印中相关信息。程序代码如下:

 import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient; public class App { private ZkClient zkClient; public ZkClient getZkClient() {
return zkClient;
} public void setZkClient(ZkClient zkClient) {
this.zkClient = zkClient;
} /**
* 初始化zookeeper
*/
public void initialize() { String connectionString="192.168.19.128:2181";
int connectionTimeout=500000; zkClient=new ZkClient(connectionString, connectionTimeout); new Thread(new Runnable() { public void run() { zkClient.subscribeDataChanges("/root1", new IZkDataListener() { public void handleDataDeleted(String dataPath) throws Exception {
System.out.println("the node 'dataPath'===>");
} public void handleDataChange(String dataPath, Object data) throws Exception {
System.out.println("the node 'dataPath'===>"+dataPath+", data has changed.it's data is "+String.valueOf(data)); }
}); } }).start();
} /**
* 函数入口
* @param args
*/
public static void main( String[] args ) { App bootStrap=new App();
bootStrap.initialize(); try {
Thread.sleep(100000000);
} catch (InterruptedException e) {
e.printStackTrace();
} }
}

环境准备


启动zookeeper,并关闭linux防火墙。

运行程序


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

zookeeper的简单使用的更多相关文章

  1. Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现

    基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现   by:授客 QQ:1033553122 测试环境 功能需求 实现思路 代码实践(关键技术点实现) 代码模块组织 ...

  2. Dubbo+Zookeeper的简单入门案例

    1.1  Dubbo简介 Apache Dubbo是一款高性能的Java RPC框架.其前身是阿里巴巴公司开源的一个高性能.轻量级的开源Java RPC框架,可以和Spring框架无缝集成. 什么是R ...

  3. dubbo+zookeeper+springboot简单示例

    目录 dubbo+zookeeper+springboot简单示例 zookeeper安装使用 api子模块 生产者producer 消费者consumer @(目录) dubbo+zookeeper ...

  4. SpringBoot + Dubbo + zookeeper 搭建简单分布式服务

    SpringBoot + Dubbo + zookeeper 搭建简单分布式服务 详细操作及源码见: https://github.com/BillyYangOne/dubbo-springboot

  5. ZooKeeper的简单理解

    1 ZooKeeper的一致性特点 概念 描述 备注 顺序一致性 以ZXID来保证事务的顺序性 原子性 以ZAB保证原子操作,要么成功,要么失败 单一视图 无论客户端从哪个服务器获取到关于应用的数据都 ...

  6. zookeeper+dubbo简单使用

    首先下载zookeeper,直接百度官网下载即可! 下载完之后,把cfg配置文件改名为zoo.cfg,如下: 在bin目录下启动zkServer即可! 项目结构: 简单讲解:首先dubbo是一个mav ...

  7. ZooKeeper系列(2)--基于ZooKeeper实现简单的配置中心

    ZooKeeper节点的类型分为以下几类:  1. 持久节点:节点创建后就一直存在,直到有删除操作来主动删除该节点 2. 临时节点:临时节点的生命周期和创建该节点的客户端会话绑定,即如果客户端会话失效 ...

  8. zookeeper+dubbo简单部署方案

    1.zookeeper服务 首先,我们需要下载:zookeeper-3.4.9 解压后,在conf文件夹中添加一个配置文件zoo.cfg,内容如下: tickTime=2000 dataDir=/Us ...

  9. zookeeper的简单搭建,java使用zk的例子和一些坑

    一 整合 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的github项目地址 https://github.com/247292980/spring- ...

随机推荐

  1. 图像RGB格式与YUV格式互转

    // rgb2yuv.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #define Level 256 //直方图bin数 #define ...

  2. python学习笔记(四) 思考和准备

    一.zip的坑 zip()函数接收多个可迭代数列,将数列中的元素重新组合,在3.0中返回迭代器指向 数列首地址,在3.0以下版本返回List类型的列表数列.我用的是3.5版本python, 所以zip ...

  3. libevent学习笔记(参考libevent深度剖析)

    最近自学libevent事件驱动库,参考的资料为libevent2.2版本以及张亮提供的<Libevent源码深度剖析>, 参考资料: http://blog.csdn.net/spark ...

  4. tp between

    $a = array( 'time' => array('between',[c,d]) ); c<= time <= d

  5. ictclas bug修复

    大体上参考链接:http://blog.csdn.net/luojinping/article/details/8788743 最后注意下SegTag.java文件 public SegTag(int ...

  6. 搜索:DLX算法

    精确覆盖问题:在一个0-1矩阵中,选定部分行,使得每一列都有且只有一个1.求解一种选法 舞蹈链(Dance Link),也就是一个循环十字链表,可以快速的删掉和恢复某行某列 结合了舞蹈链的搜索就称作D ...

  7. Css Sprite 图片等比缩放图片大小

    图片大小80*40,即每张图片大小40*40,如何以20*20显示图片?1. 首先看下如何以40*40显示第二张图片: 正常显示css代码 .sprite { background-image: ur ...

  8. 【BZOJ】1497: [NOI2006]最大获利 最大权闭合子图或最小割

    [题意]给定n个点,点权为pi.m条边,边权为ci.选择一个点集的收益是在[点集中的边权和]-[点集点权和],求最大获利.n<=5000,m<=50000,0<=ci,pi<= ...

  9. BestCoder Round #40 解题报告

    这场是第一场没有米的BC... 大概也是想震一震那些一听说没米了就不打BC的人吧 这次的题目质量比以往高了许多 (然而我并没有打这一场BC 但是今天下午到现在做的过程中真的学到了不少知识呢 A题略水. ...

  10. 爬虫--Scrapy之Downloader Middleware

    下载器中间件(Downloader Middleware) 下载器中间件是介于Scrapy的request/response处理的钩子框架. 是用于全局修改Scrapy request和respons ...