Zookeeper--配置服务
Zookeeper--配置服务
配置服务是分布式应用中重要的服务,作用是使集群中的机器可以共享配置信息中公共的部分。ZooKeeper可作为一个具有高可用,全局一致的配置服务器,允许客户端获取和更新配置文件。使用ZooKeeper中的观察机制,可以建立一个活跃的配置服务,客户端监控自己感兴趣的配置节点,在第一时间得到配置信息修改的通知。
下面是一个简单的例子:
配置服务类:
public class ZkConfigService implements Watcher{
private final Charset CHARSET = Charset.forName("UTF-8");
private final int SESSION = 5000;
public final String CONFIG_PATH = "/__config__";
private ZooKeeper zk;
private CountDownLatch latch = new CountDownLatch(1);
private static ZkConfigService ser = new ZkConfigService();
public static ZkConfigService getInstance(){
return ser;
}
private ZkConfigService() {
try {
zk = new ZooKeeper("localhost:2181", SESSION, this);
latch.await();
if (zk.exists(CONFIG_PATH, false) == null) {
zk.create(CONFIG_PATH, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
}
}
private void close() throws InterruptedException {
zk.close();
}
public void write(String path, String value) {
path = CONFIG_PATH + "/" + path;
Stat stat = null;
try {
stat = zk.exists(path, false);
if (stat == null) {
zk.create(path, value.getBytes(CHARSET), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
} else {
zk.setData(path, value.getBytes(CHARSET), -1);
}
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public String read(String path, Watcher watcher) {
path = CONFIG_PATH + "/" + path;
byte[] data = new byte[0];
try {
data = zk.getData(path, watcher, null);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return new String(data, CHARSET);
}
@Override
public void process(WatchedEvent watchedEvent) {
if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {
latch.countDown();
}
}
}
---
配置更新类:
public class ConfigUpdater {
private String path;
private Random random = new Random();
private ZkConfigService configSer = ZkConfigService.getInstance();
public ConfigUpdater(String path) {
this.path = path;
}
public static void main(String[] args) throws KeeperException, InterruptedException, IOException {
ConfigUpdater up = new ConfigUpdater("db.url");
up.run();
}
public void run() throws KeeperException, InterruptedException {
int i=0;
while (true) {
String value = i++ + "";
configSer.write(path, value);
System.out.printf("Set %s to %s\n", path, value);
TimeUnit.SECONDS.sleep(random.nextInt(5));
}
}
}
---
配置获取类:
public class ConfigWatcher implements Watcher {
private String path;
private ZkConfigService configSer = ZkConfigService.getInstance();
public ConfigWatcher(String path) {
this.path = path;
}
public static void main(String[] args) throws InterruptedException, KeeperException, IOException {
ConfigWatcher w = new ConfigWatcher("db.url");
w.display();
Thread.sleep(Long.MAX_VALUE);
}
public void display() throws KeeperException, InterruptedException {
String value = configSer.read(path, this);
System.out.printf("Read %s as %s\n", path, value);
}
@Override
public void process(WatchedEvent event) {
if (event.getType() == Event.EventType.NodeDataChanged) {
try {
display();
} catch (InterruptedException e) {
System.err.println(e);
Thread.currentThread().interrupt();
} catch (KeeperException e) {
e.printStackTrace();
}
}
}
}
---每次获取时都设置一个监控
分别启动配置更新和获取类,控制台打印如下:


end
Zookeeper--配置服务的更多相关文章
- zookeeper配置中心实战--solrcloud zookeeper配置中心原理及源码分析
程序的发展,需要引入集中配置: 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址…… 并且对配置的期望也越来越高,配置修改后实时生效,灰度发布,分环境.分集群管理配 ...
- Zookeeper 配置集群环境详解
在Linux环境下安装zookeeper 在Linux环境下安装zookeeper 1. 将zookeeper-3.4.13.tar.gz复制到linux操作系统 2. 通过p ...
- Windows里如何正确安装Zookeeper以服务运行(博主推荐)(图文详解)
不多说,直接上干货! 为什么要在Win下来安装Zookeeper呢? 其实玩过大数据的人很清楚,在Linux下我更不说了.在win下,如Disconf .Dubbo等应用. 所以,它的应用是非常广的. ...
- Dubbo学习笔记1:使用Zookeeper搭建服务治理中心
Zookeeper是Apache Hadoop的子项目,是一个树形的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,推荐生成环境使用. , 下面结合上图介绍Zookeeper在 ...
- zookeeper命名服务
zookeeper概念 zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,底层组成单元是znode,对于zookeeper来说,所有的功能都是基于znode来实现的,因此有万物皆节点 ...
- 【转帖】基于Zookeeper的服务注册与发现
http://www.techweb.com.cn/network/hardware/2015-12-25/2246973.shtml 背景 大多数系统都是从一个单一系统开始起步的,随着公司业务的快速 ...
- 服务端使用Zookeeper注册服务地址,客户端从Zookeeper获取可用的服务地址。
一个轻量级分布式RPC框架--NettyRpc - 阿凡卢 - 博客园 http://www.cnblogs.com/luxiaoxun/p/5272384.html 这个RPC框架使用的一些技术所解 ...
- Zookeeper协调服务系统·ELK日志管理系统简介
Zookeeper协调服务系统: 说明:它分布式系统中的协调服务系统,是Hadoop下的一个子项目,可提供的服务有:名字服务.配置服务.分布式同步.组服务等. 3个角色:Leaders.Follow. ...
- Windows里正确安装Zookeeper以服务运行
不多说,直接上干货! 为什么要在Win下来安装Zookeeper呢? 其实玩过大数据的人很清楚,在Linux下我更不说了.在win下,如Disconf .Dubbo等应用. 所以,它的应用是非常广的. ...
- 基于CentOS6.5的Dubbo及Zookeeper配置
基于CentOS的Dubbo及Zookeeper配置 需要提前准备好的资料: 1.首先配置java环境 步骤: 将jdk的包上传至centos服务器的/opt目录下,并且解压 tar -zxvf jd ...
随机推荐
- Qt中使用ActiveX控件
(转自:http://blog.csdn.net/tingsking18/article/details/5403038) 在Qt中使用ActiveX控件 Qt的windows商业版本提供了Activ ...
- HDU 3473 Minimum Sum 划分树,数据结构 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=3473 划分树模板题目,需要注意的是划分树的k是由1开始的 划分树: 参考:http://blog.csdn.ne ...
- 二十一、utl_file(用于读写OS文件)
1.概述 作用:用于读写OS文件.使用该包访问OS文件时,必须要为OS目录建立相应的DIRECTORY对象..当用户要访问特定目录下的文件时,必须要具有读写DIRECTORY对象的权限.在使用UTL_ ...
- 什么是Quartz?
什么是Quartz Quartz是一个开源的作业调度框架,Quartz根据用户设定的时间规则来执行作业,使用场景:在平时的工作中,估计大多数都做过轮询调度的任务,比如定时轮询数据库同步,定时邮件通知. ...
- vector概念
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- LeetCode OJ:Burst Balloons(击破气球)
Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it represented by ...
- C++解决error C4996报错
今天用c++写了个数独程序,在编译过程中报了一个错误: 1>------ 已启动生成: 项目: sudoku, 配置: Debug Win32 ------1> main.cpp1> ...
- 胖AP基本配置:
配置思路: 先创建wlan并广播ssid 进入射频子接口封装用户vlan 进入射频口关联wlan 注意:03 多个无线信号配置 注:在把AP改为 ap-mode fat后不能退出特权模式,不然需要 ...
- phpcms 缓存模板文件
caches\caches_template\default\content 对应模板文件的编译
- BZOJ1857 Scoi2010 传送带 【三分】
BZOJ1857 Scoi2010 传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P ...