监听zookeeper事件变化

虽然自己实现了客户端监听zk节点变化,今天发现有现成的工具,着实不赖,记录一下。呵呵!
如何使用Cruator监听zookeeper事件变化
package curator;

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.CuratorFrameworkFactory.Builder;
import org.apache.curator.framework.recipes.cache.PathChildrenCache;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.utils.ZKPaths;

public class CuratorWatch {

	static CuratorFramework zkclient = null;
	static String nameSpace = "wasu";// 根节点
	static {

		String zkhost = "127.0.0.1:2181";// zk的host
		RetryPolicy rp = new ExponentialBackoffRetry(1000, 3);// 重试机制
		Builder builder = CuratorFrameworkFactory.builder().connectString(zkhost).connectionTimeoutMs(5000).sessionTimeoutMs(5000).retryPolicy(rp);
		builder.namespace(nameSpace);
		CuratorFramework zclient = builder.build();
		zkclient = zclient;
		zkclient.start();// 放在这前面执行
		zkclient.newNamespaceAwareEnsurePath(nameSpace);

	}

	public static void main(String[] args) throws Exception {

		watch();
		Thread.sleep(Long.MAX_VALUE);

	}

	/**
	 * 
	 * 监听节点变化
	 * 
	 * */
	public static void watch() throws Exception {
		PathChildrenCache cache = new PathChildrenCache(zkclient, "/rmi", false);
		cache.start();

		System.out.println("监听开始/zk........");
		PathChildrenCacheListener plis = new PathChildrenCacheListener() {

			@Override
			public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
				switch (event.getType()) {
				case CHILD_ADDED: {
					System.out.println("Node added: " + ZKPaths.getNodeFromPath(event.getData().getPath()));
					break;
				}

				case CHILD_UPDATED: {
					System.out.println("Node changed: " + ZKPaths.getNodeFromPath(event.getData().getPath()));
					break;
				}

				case CHILD_REMOVED: {
					System.out.println("Node removed: " + ZKPaths.getNodeFromPath(event.getData().getPath()));
					break;
				}
				}

			}
		};
		// 注册监听
		cache.getListenable().addListener(plis);

	}
}


执行命令窗口截图:

事件监听效果截图:


如何使用Curator操作zookeeper
ZooKeeper系列之二:Zookeeper常用命令

猜你喜欢

转载自songjianyong.iteye.com/blog/2181901