您的位置:首页 > 其它

zookeeper分布式配置管理

2014-08-27 10:59 162 查看
配置中心代码:

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");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: