client的创建
连接地址不写端口,默认为2181
sessionTimeout连接超时时长int类型的
Watcher目前不知道干嘛用的,暂时传的null
zkClient = new ZooKeeper("127.0.0.1", sessionTimeout, Watcher);
clent采用session会话?
创建节点
zkclent.create((路径)"/zk_test/zk_test_test",(数据)null,(权限)ZooDefs.Ids.OPEN_ACL_UNSAFE,(类型)CreateMode.PERSISTENT_SEQUENTIAL);
路径:只能在下现有路径的基础上,中间缺的不会自动创建
类型:是否持久、是否有序;如果不是持久的节点,节点会随着连接的断开而消失。如果是顺序的节点则在创建的时候节点的名字会在你设置的名字后面加一串数子。一开始创建"/zkdemo",然后去get发现报错,没有这个节点,看控制台只有“zkdemo0000000000”。如果添加顺序节点的话一定要记住create返回的节点名字,这是实际保存的名字,不然后面get不到
更新节点
zkclent.setData("/zk_test", "hello test".getBytes(),0);
linux上有不带版本的更新,而java只有带版本号的更新,如果传入的版本号不对的话会保存,而且传入的必须是当前的版本号,不能跳过当前版本号传大的版本
版本号从0开始,每次更改版本号+1;不管创建的时候有没有传data,新创建的节点版本号为0
修改的时候传入的是当前的版本号,比如创建后版本号为0,第一次修改时就应该传入现在的版本号0
public void setData(final String path, byte data[], int version,StatCallback cb, Object ctx)//这是怎么用
获取节点数据
Stat stat = new Stat();
System.out.println(new String(zkclent.getData("/zk_test", false, stat)));
getData返回的是Byte[],如果想要查看节点除data数据外如版本号等信息的话,需要传入Stat,方法返回时会将信息填充之传入的Stat
每个节点内有一个byte[]来保存data,Stat作为节点的一个字段来保存保本号等其他信息。
StatPersisted与Stat的区别?