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 ...
随机推荐
- ElementTree之Xml文档处理
ElementTree: 表示整个XML层级结构 Element: 表示树形结构中所有的父节点 SubElement: 表示树形结构中所有的子节点 有些节点既是父节点,又是子节点 下面来看下这两个类的 ...
- idea git tag 管理
项目release 之后一般都会打一个tag 做记录.本人使用idea管理tag的时候,遇到的问题做一些记录. 1:idea 创建tag idea 创建tag ,我们可以右键项目,然后按照下图操作创建 ...
- KindEditor富文本编辑框和BeautifulSoup的基本使用
KindEditor富文本编辑框 1.进入官网 2.下载 官网下载:http://kindeditor.net/down.php 本地下载:http://files.cnblogs.com/files ...
- SpringAnnotation注解之@Autowired
@Autowired:自动装配,不用在bean里写<property>属性来指定所依赖的属性 1 2 3 4 @Autowired public void setUserDao(UserD ...
- CString与输入输出流对象问题。
在C++ 编程出现:cin>>Id;没有与这些操作匹配的">>"运算符: 你要看你的Id的数据类型,如果是CString等字符串,要用cin.getline ...
- VM遇到的问题参考
http://saturn.blog.51cto.com/184463/950731/
- Shell 命令行求两个文件每行对比的相同内容
Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...
- HDU 1374
http://acm.hdu.edu.cn/showproblem.php?pid=1374 已知三点坐标,求三点确定的圆的周长 #include <iostream> #include ...
- liunx工具学习之taskset
当你优化多线程任务的时候,发现某个线程在不同的核上跳转较大,从而耗费CPU的时候想法肯定是想可以把对应线程绑定到特定的核上,可是每次这样操作每次尝试看效果的时候都要重启进程,那有没有一个工具可以直接处 ...
- caffe 细节
batch :http://www.zhihu.com/question/32673260 caffe blog: http://blog.csdn.net/abcjennifer/article/d ...