package utils;
import java.util.List;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.exception.ZkMarshallingError;
import org.I0Itec.zkclient.serialize.SerializableSerializer;
import org.I0Itec.zkclient.serialize.ZkSerializer;
import org.apache.commons.io.Charsets;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.ParserConfig;
public class ZKUtil {
public static void main(String[] args) {
// ZkClient zkClient = new ZkClient("IP:2181",3000,3000,new SerializableSerializer());
ZkClient zkClient = new ZkClient("IP:2181",3000,3000);
zkClient.setZkSerializer( new MyZkSerializer()); //序列化问题 https://www.cnblogs.com/expiator/p/9943756.html
String path = "/otter/canal/destinations";
Object t = zkClient.readData(path);
List<String> dirs = zkClient.getChildren(path);
for(String tmp: dirs){
System.out.println(tmp);
// List<String> subDestinations = zkClient.getChildren(path + "/" +tmp + "/1001/cursor");
// byte[] b = zkClient.getData(path + "/" +tmp + "/1001/cursor", null, null);
String o = (String) zkClient.readData(path + "/" +tmp + "/1001/cursor");
System.out.println(o);
//autoType is not support 异常
ParserConfig.getGlobalInstance().setAutoTypeSupport(true); // https://blog.csdn.net/zl1zl2zl3/article/details/81477043
JSONObject jsonObj = JSON.parseObject(o);
JSONObject ob = (JSONObject) jsonObj.get("postion");
Long position = ob.getLong("timestamp");
System.out.println(position);
Long now = System.currentTimeMillis();
if( Math.abs(now - position) > 10000){
System.out.println(tmp + " EXCEPTION !");
}else{
System.out.println(tmp + " now - position : " + (now - position));
}
}
}
}
class MyZkSerializer implements ZkSerializer {
/**
* 序列化,将对象转化为字节数组
*/
public byte[] serialize(Object obj) throws ZkMarshallingError {
return String.valueOf(obj).getBytes(Charsets.UTF_8);
}
/**
* 反序列化,将字节数组转化为UTF_8字符串
*/
public Object deserialize(byte[] bytes) throws ZkMarshallingError {
return new String(bytes, Charsets.UTF_8);
}
}