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改变该节点的数据。程序代码如下:
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的简单使用的更多相关文章
- Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现 by:授客 QQ:1033553122 测试环境 功能需求 实现思路 代码实践(关键技术点实现) 代码模块组织 ...
- Dubbo+Zookeeper的简单入门案例
1.1 Dubbo简介 Apache Dubbo是一款高性能的Java RPC框架.其前身是阿里巴巴公司开源的一个高性能.轻量级的开源Java RPC框架,可以和Spring框架无缝集成. 什么是R ...
- dubbo+zookeeper+springboot简单示例
目录 dubbo+zookeeper+springboot简单示例 zookeeper安装使用 api子模块 生产者producer 消费者consumer @(目录) dubbo+zookeeper ...
- SpringBoot + Dubbo + zookeeper 搭建简单分布式服务
SpringBoot + Dubbo + zookeeper 搭建简单分布式服务 详细操作及源码见: https://github.com/BillyYangOne/dubbo-springboot
- ZooKeeper的简单理解
1 ZooKeeper的一致性特点 概念 描述 备注 顺序一致性 以ZXID来保证事务的顺序性 原子性 以ZAB保证原子操作,要么成功,要么失败 单一视图 无论客户端从哪个服务器获取到关于应用的数据都 ...
- zookeeper+dubbo简单使用
首先下载zookeeper,直接百度官网下载即可! 下载完之后,把cfg配置文件改名为zoo.cfg,如下: 在bin目录下启动zkServer即可! 项目结构: 简单讲解:首先dubbo是一个mav ...
- ZooKeeper系列(2)--基于ZooKeeper实现简单的配置中心
ZooKeeper节点的类型分为以下几类: 1. 持久节点:节点创建后就一直存在,直到有删除操作来主动删除该节点 2. 临时节点:临时节点的生命周期和创建该节点的客户端会话绑定,即如果客户端会话失效 ...
- zookeeper+dubbo简单部署方案
1.zookeeper服务 首先,我们需要下载:zookeeper-3.4.9 解压后,在conf文件夹中添加一个配置文件zoo.cfg,内容如下: tickTime=2000 dataDir=/Us ...
- zookeeper的简单搭建,java使用zk的例子和一些坑
一 整合 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的github项目地址 https://github.com/247292980/spring- ...
随机推荐
- 单例 ------ C++实现
基础知识掌握: 单例考虑三点:内存何时释放.运行速度如何.多线程下能否保证只有一个实例 如果获取对象的返回值类型是引用,返回值赋值给变量而不是引用会进行对象的拷贝,这样就会出现两个对象,可以把显示声明 ...
- Spring Boot + Swagger
前言: 在互联网公司, 微服务的使用者一般分为两种, 客户端和其他后端项目(包括关联微服务),不管是那方对外提供文档 让别人理解接口 都是必不可少的.传统项目中一般使用wiki或者文档, 修改繁琐,调 ...
- ECNA-A- Abstract Art
题目描述 Arty has been an abstract artist since childhood, and his works have taken on many forms. His l ...
- NOIP模拟赛11
T1 [HAOI2016]放棋子 https://daniu.luogu.org/problem/show?pid=3182 障碍交换行不影响 所以第i列有障碍的行换到第i行 然后错排公式 本校自测要 ...
- Counting Pair
Counting Pair Time Limit: 1000 ms Memory Limit: 65535 kB Solved: 112 Tried: 1209 Submit Status Best ...
- [译]Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介
第二课:QuartzAPI,Jobs和Triggers简介 Quartz API Quartz API 关键的几个接口: Scheduler:跟任务调度相关的最主要的API接口. Job:你期望任务调 ...
- 使用纯 CSS 实现响应式的图片显示效果
有许多方法可以实现页面里图像的响应式显示(Responsive).然而,我碰到的所有方案都使用了JavaScript.这使我疑惑不用 JavaScript 实现图像响应是否可行. 我提出了下面纯CSS ...
- matlab实现cart(回归分类树)
作为机器学习的小白和matlab的小白自己参照 python的 <机器学习实战> 写了一下分类回归树,这里记录一下. 关于决策树的基础概念就不过多介绍了,至于是分类还是回归..我说不清楚. ...
- HDU 1166 敌兵布阵 (树状数组 单点修改+区间查询)
题目链接 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和T ...
- Wireshark过滤语句中常用的操作符
关键字有: eq,== 等于ne,!= 不等于gt,> 比…大lt,< 比…小 ge,>= 大于等于le,<= 小于等于 and,|| 且 or,&& 或 no ...