zookeeper的java api操做
建立会话:
Zookeeper(String connectString,int sessionTimeout,Watcher watcher)
Zookeeper(String connectString,int sessionTimeout,Watcher watcher,boolean canBeReadOnly)
Zookeeper(String connectString,int sessionTimeout,Watcher watcher,long sessionId,byte[] sessionPasswd)
Zookeeper(String connectString,int sessionTimeout,Watcher watcher,long sessionId,byte[] sessionPasswd,boolean canBeReadOnly)
参数说明:
connectString -- host:port[,host:port][basePath] 指定的服务器列表,多个host:port之间用英文逗号分隔。还能够可选择的指定一个基路径,若是指定了一个基路径,则全部后续操做基于这个及路径进行。
sessionTimeOut -- 会话超时时间。以毫秒为单位。客户端和服务器端之间的链接经过心跳包进行维系,若是心跳包超过这个指定时间则认为会话超时失效。
watcher -- 指定默认观察者。若是为null表示不须要观察者。
canBeReadOnly -- 是否支持只读服务。只当一个服务器失去过半链接后不能再进行写入操做时,是否继续支持读取操做。略
sessionId、SessionPassword -- 会话编号 会话密码,用来实现会话恢复。
**注意,整个建立会话的过程是异步的,构造方法会在初始化链接后即返回,并不表明真正创建好了一个会话,此时会话处于"CONNECTING"状态。
**当会话真正建立起来后,服务器会发送事件通知给客户端,只有客户端获取到这个通知后,会话才真正创建。
代码:
//TODO
建立节点:
String create(final String path,byte data[],List<ACL> acl,CreateMode createMode);//同步方式建立
void create(final String path,byte data[],List<ACL> acl,CreateMode createMode,StringCallback cb,Object ctx);//异步方式建立
参数说明:
path 要建立的数据节点的路径
data [] 节点建立时初始数据内容
acl 节点acl安全策略
createMode 建立模式
PERSISTENT 持久
PERSISTENT_SEQUENTIAL 持久顺序
EPHEMERAL 临时
EPHEMERAL_SEQUENTIAL 临时顺序
cb 回调接口
ctx 传递对象,用来在回调方法中使用 一般是个上下文对象
**注意:不支持递归建立,即不能在无父节点的状况下建立出子节点
**尝试建立已经存在的节点将失败并抛出异常
**在不须要进行任何权限控制时,只需传入Ids.OPEN_ACL_UNSAFE便可
代码:
//TODO
删除节点:
public void delete(final String path,int version)
public void delete(final String path,int version,VoidCallback cb,Object ctx)
**注意:没法删除存在子节点的节点,即若是要删除一个节点,必需要先删除其全部子节点
读取数据:
getChildren
//同步方式
List<String> getChildren(final String path,Watcher watcher)
List<String> getChildren(String path,boolean watch)
List<String> getChildren(final String path,Watcher watcher,Stat stat)
List<String> getChildren(String path,boolean watch,Stat stat)
//异步方式
void getChildred(final String path,Watcher watcher,ChildrenCallback cb,Object ctx)
void getChildred(String path,boolean watch,ChildrednCallback cb,Object ctx)
void getChildred(final String path,Watcher watcher,Children2Callback cb,Object ctx)
void getChildred(String path,boolean watch,Children2Callback cb,Object ctx)
参数说明:
path 要建立的数据节点的路径
watcher 观察者,一旦在本子节点获取以后,子节点列表发生变动,服务器端向客户端发送消息,触发watcher中的回调。注意,仅仅是通知而已,若是须要新的子节点列表,须要本身再次去获取。容许传入null。
watch 代表是否须要注册一个Watcher。为true则通知默认到默认watcher,若是为false则不使用
cb 回掉函数
ctx 上下文对象
stat 指定数据节点的状态信息。用法是在接口中传入一个旧的stat变量,该stat变量会在方法执行过程当中,被来自服务端响应的新stat对象替换。
getData
//同步方式
byte [] getData(final String path,Watcher watcher, Stat stat)
byte [] getData(String path,boolean watch, Stat stat)
//异步方式
void getData(final String path,Watcher watcher, DataCallback cb,Object ctx)
void getData(String path,boolean watch, DataCallback cb,Object ctx)
*能够经过注册Watcher进行监听,一旦该节点数据被更新会通知客户端
更新数据
//同步方式
Stat setData(final String path,byte data[],int version)//version能够传入-1,代表要基于最新版本进行更新操做
//异步方式
void setData(final String path,byte data[],int version,StatCallback cb,Object ctx)
检查节点是否存在
//同步方式
public Stat exists(final String path,Watcher watcher)
public Stat exists(String path,boolean watch)
//异步方式
public Stat exists(final String path,Watcher watcher,StatCallback cb,Object ctx)
public Stat exists(String path,boolean watch,StatCallback cb,Object ctx)
*能够经过注册Watcher进行监听,一旦节点被建立、删除、数据被更新都会通知客户端
zookeeper权限控制:
addAuthInfo(String schema,byte [] auth)
参数说明;
schema 权限模式,能够是world auth digest ip super,咱们使用digest
byte[] auth 权限控制标识,由"foo:123".getByte()方式组成,后续操做只有auth值相同才能够进行
**注意删除操做,若是在增长节点时指定了权限,则对于删除操做,认为权限加在了子节点上,删除当前结点不须要权限,删除子节点须要权限。