java zookeeper监控_用Java代码实现监控zookeeper节点信息的变化以及遍历节点

代码比较简单,附上待深剖

import org.I0Itec.zkclient.IZkDataListener;

import org.I0Itec.zkclient.ZkClient;

import org.I0Itec.zkclient.serialize.SerializableSerializer;

import org.apache.commons.lang3.StringUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.InitializingBean;

public class ZkService implements InitializingBean{

private static final Logger logger = LoggerFactory.getLogger(ZkService.class);

public static final String ZK_PATH_APP_AUTH = "/test";

private String zkUrl;

private ZkClient zk;

private IZkDataListener initDataListener() {

IZkDataListener listener = new IZkDataListener() {

@Override

public void handleDataChange(String dataPath, Object data) throws Exception {

String value = data.toString();

logger.info(dataPath + "=" + value);

if (StringUtils.isEmpty(value)) {

return;

}

value = value.split("#")[0];

if (StringUtils.isNumeric(value)) {

if (ZK_PATH_API.equals(dataPath)) {

/** TODO

*

*/

}

}

}

@Override

public void handleDataDeleted(String dataPath) throws Exception {

}

};

return listener;

}

private void init() throws Exception{

zk = new ZkClient(zkUrl,10000,10000,new SerializableSerializer());

if(!zk.exists(ZK_PATH_APP_AUTH)){

zk.createPersistent(ZK_PATH_APP_AUTH);

}

IZkDataListener listener = initDataListener();

zk.subscribeDataChanges(ZK_PATH_APP_AUTH, listener);

}

public String getZkUrl() {

return zkUrl;

}

public void setZkUrl(String zkUrl) {

this.zkUrl = zkUrl;

}

@Override

public void afterPropertiesSet() throws Exception {

init();

}

}

public static void main(String[] args) {

zk = new ZkClient(zkUrl,10000,10000,new SerializableSerializer());

String path = "/dubbo";

output(0, path);

}

private static void output(int deep, String path) {

//输出当前路径和数据

System.out.println(getPrefix(deep)+path+" "+JSON.toJSONString(zk.readData(path)));

//查询子节点

List list = zk.getChildren(path);

if(list == null || list.isEmpty()) {

return;

}

//输出子节点

for(String value : list) {

output(deep+1, path+"/"+value);

}

}

private static String getPrefix(int i) {

String str = "----------------------------------------";

return str.substring(0,i*2); //层级展示处理

}


版权声明:本文为weixin_29660181原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。