Zookeeper实例ZkClient API-获取子节点列表
import java.util.List;import org.I0Itec.zkclient.IZkChildListener;import org.I0Itec.zkclient.ZkClient;/**** @ClassName: Get_Children_Sample* @Description: TODO(ZkClient获取子节点列表)* @author*
import java.util.List;
import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;
/**
*
* @ClassName: Get_Children_Sample
* @Description: TODO(ZkClient获取子节点列表)
* @author
* @date 2017年6月14日 下午1:01:45
*
*/
public class Get_Children_Sample {
public static void main(String[] args) throws Exception {
String path = "/zk-book";
ZkClient zkClient = new ZkClient("localhost:2181", 5000);
zkClient.subscribeChildChanges(path, new IZkChildListener() {
public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
System.out.println(parentPath + " 's child changed, currentChilds:" + currentChilds);
}
});
zkClient.createPersistent(path);
Thread.sleep( 1000 );
System.out.println(zkClient.getChildren(path));
Thread.sleep( 1000 );
zkClient.createPersistent(path+"/c1");
Thread.sleep( 1000 );
zkClient.delete(path+"/c1");
Thread.sleep( 1000 );
zkClient.delete(path);
Thread.sleep( Integer.MAX_VALUE );
}
}
输出:
/zk-book 's child changed, currentChilds:[]
[]
/zk-book 's child changed, currentChilds:[c1]
/zk-book 's child changed, currentChilds:[]
/zk-book 's child changed, currentChilds:null
注意:
客户端可以对一个不存在的节点进行子节点变更监听。
一旦客户端对一个节点注册了子节点变更监听之后,那么当该节点的子节点列表发生变更的时候,服务端都会通知客户端,并将最新的子节点列表发送给客户端。
该节点本身的创建和删除也会通知客户端。
ZkClient的Listener不是一次性的,客户端只需要注册一次就会一直生效。
ZkClient只提供了一个对外的API,用于获取指定的子节点列表,这个API的返回值是子节点的相对路径。客户端可以对一个不存在的节点进行子节点变更监听。
一旦客户端对一个节点注册了子节点列表变更监听之后,那么当该节点的子节点列表发生变更的时候,服务端都会通知客户端,并将最新的子节点列表发送给客户端。
该节点本身的创建或删除也会通知到客户端。Zookeeper的Listener不是一次性的,客户端只需要注册一次就一直有效。
ZkClient中引入了Listener的概念,客户端可以通过注册相关的事件监听来对Zookeeper服务端事件订阅,在获取直接点列表的接口上,可以通过如下API来进行监听和取消监听:
扩展
参考
1.《从Paxos到Zookeeper:分布式一致性原理与实践》
2. http://javadox.com/com.101tec/zkclient/0.4/org/I0Itec/zkclient/ZkClient.html
更多推荐
所有评论(0)