zookeeper分布式配置管理
来源:互联网 发布:mysql 替换 编辑:程序博客网 时间:2024/05/17 06:05
配置中心代码:
package test2;
import java.io.IOException;
import java.io.PrintStream;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
public class ConfigCenter implements Watcher {
ZooKeeper zk = null;
String znode;
ConfigCenter(String address, String znode) {
this.znode = znode;
try {
this.zk = new ZooKeeper(address, 3000, this);
Stat st = this.zk.exists("/root1", true);
if (st == null) {
this.zk.create(znode, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
}
} catch (IOException e) {
e.printStackTrace();
this.zk = null;
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void process(WatchedEvent event) {
System.out.println(event.toString());
try {
this.zk.exists("/root1", true);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
void updateConfig(String str) {
try {
Stat s = this.zk.exists(this.znode, true);
this.zk.setData(this.znode, str.getBytes(), s.getVersion());
} catch (Exception e) {
e.printStackTrace();
}
}
}
监听客户端代码:
package test2;
import java.io.IOException;
import java.io.PrintStream;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.data.Stat;
import org.apache.zookeeper.ZooKeeper;
//public class ConfigCenter implements Watcher
public class ZooKeeperWatcher implements Watcher ,Runnable {
private ZooKeeper zooKeeper = null;
private String znode;
public ZooKeeper getZooKeeper() {
return this.zooKeeper;
}
//zw1.connect("127.0.0.1", "/root1");
public void connect(String hosts, String znode) throws IOException,
InterruptedException, KeeperException {
this.zooKeeper = new ZooKeeper(hosts, 2000, this);
this.znode = znode;
this.zooKeeper.exists(znode, true);
}
public void setData(byte[] data) {
try {
Stat s = this.zooKeeper.exists(znode, false);
this.zooKeeper.setData(znode, data, s.getVersion());
} catch (Exception e) {
e.printStackTrace();
}
}
public void process(WatchedEvent event) {
System.out.println(event.toString());
try {
this.zooKeeper.exists(znode, true);//不知道为什么一定要加上这句话,下次事件到来时,才会触发process事件
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void run() {
try {
synchronized (this) {
while (true) {
wait();
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
测试代码:
package test2;
import java.io.IOException;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;
public class test {
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
ZooKeeperWatcher zw1 = new ZooKeeperWatcher();
zw1.connect("127.0.0.1", "/root1");
ZooKeeperWatcher zw2 = new ZooKeeperWatcher();
zw2.connect("127.0.0.1", "/root1");
new Thread(zw1).start();
new Thread(zw2).start();
ConfigCenter cc = new ConfigCenter("127.0.0.1","/root1");
cc.updateConfig("a");
cc.updateConfig("b");
cc.updateConfig("c");
cc.updateConfig("d");
}
}
- zookeeper分布式配置管理
- zookeeper分布式配置管理
- 基于ZooKeeper的分布式配置管理系统
- Zookeeper配置管理
- Zookeeper配置管理
- Zookeeper统一配置管理
- ZooKeeper应用场景-配置管理
- Zookeeper应用--配置管理
- zookeeper统一配置管理
- ZooKeeper 统一配置管理
- zookeeper 之配置管理
- 分布式配置管理平台-Disconf
- 分布式配置管理系统QConf
- 分布式配置管理平台 Disconf
- 分布式配置管理平台 Disconf
- 分布式配置管理平台Disconf
- 分布式配置管理平台Disconf
- 分布式配置管理平台Disconf
- 宏定义中do while(0)使用
- fedora自动化编译autotools的使用(转载)
- 未初始化和非法的指针
- C语言数据类型32位和64位不同
- HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
- zookeeper分布式配置管理
- 如何用js判断文件是否存在
- android之webservice开发
- 双向链表插入与删除
- Codeforces Round #263 (Div. 1) C. Appleman and a Sheet of Paper
- 嵌入式 Linux驱动虚拟地址和物理地址的映射
- hdu 3342 Legal or Not (拓扑排序)
- Android 4.4 音量调节流程分析(二)
- SLF4J和Logback日志框架详解