zookeeper入门(1)改变数据接受通知

/**
 * 2012-10-20
 * [email protected]
 */
package config;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;

/**
 * 模拟了一个配置项改变,监听者接受到通知的例子
 */
public class ConfigApp1 {
	public static void main(String[] args) throws IOException, KeeperException,
			InterruptedException {
		//连接zookeeper服务器
		final ZooKeeper zk = new ZooKeeper("127.0.0.1:2187", 5000,
				new Watcher() {
					public void process(WatchedEvent event) {
						System.out.println("===========");
					}
				});
		//创建节点app1,不进行ACL权限控制,EPHEMERAL:临时节点
		zk.create("/app1", "app1".getBytes(), Ids.OPEN_ACL_UNSAFE,
				CreateMode.EPHEMERAL);
		//注册对该节点的监听
		zk.exists("/app1", new WatcherClass(zk));

		//延迟2秒后 开始改变数据
		TimeUnit.SECONDS.sleep(2);
		for (int i = 1; i < 10; i++) {
			TimeUnit.SECONDS.sleep(1);
			String s = ("app" + i * 10);
			zk.setData("/app1", s.getBytes(), -1);
			System.out.println("数据改变了:"+s);
		}
		System.in.read();
	}

	static class WatcherClass implements Watcher {
		private ZooKeeper zk;

		public WatcherClass(ZooKeeper zk) {
			this.zk = zk;
		}

		public void process(WatchedEvent event) {
			try {
				byte[] b = zk.getData("/app1", false, null);
				System.out.println("改变数据通知:" + new String(b));
				
				//获取数据后,再次对节点进行监听
				zk.exists("/app1", new WatcherClass(zk));
			} catch (KeeperException e) {
				e.printStackTrace();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

你可能感兴趣的:(zookeeper入门(1)改变数据接受通知)