ZooKeeper

1、在配置文件里面设置好ZooKeeper参数

[ZOOKEEPER]

#是否开启zookeeper,开启服务将在框架启动时自动连接zookeeper节点,并完成默认节点文件加载创建
zk_enable=1

#zookeeper集群地址,多个用逗号隔开
zk_hosts=127.0.0.1:2181

#权限控制模式,没有就不用设置

#zk_scheme=

#具体权限信息
#zk_auth=

#zookeeper连接超时
zk_timeout=3000

#监听回调类设置,回调类必须继承JkasZkWatcher

zk_watcherclass=test.z.zookeeper.Test

 

2、默认加载创建节点文件

文件位置位于data/zktab文件,启动或文件被修改将重新加载创建节点

文件结构:节点:节点值|是否监听|节点类型|访问权限1|访问权限2|访问权限n...

#权限控制模式分为:world、auth、digest、ip和super
#acl r:read w:write c:create d:delete a:admin
#creatMode 0:临时 1:临时顺序 2:永久 3:永久顺序

#每行一个节点,如下:
/test:v|0|0|world:anyone:cwrad|ip:192.168.1.5:cw|ip:192.168.1.8:rw

/tes2:c|1

 

3、常用方法

protected String zkCreate(String key,String value)

protected String zkCreate(String key,String value,boolean watcher)//watcher是否监听,监听节点的添加、修改、删除,通过监听事件通知,下同

protected String zkCreate(String key,String value,int createmode)//createmode为节点类型 0:临时 1:临时顺序 2:永久 3:永久顺序

protected String zkCreate(String key,String value,int createmode,boolean watcher)//createmode为节点类型 0:临时 1:临时顺序 2:永久 3:永久顺序

protected String zkCreate(String key,String value,String acls,int createmode)//acls 为访问权限,结构如:world:anyone:cwrad|ip:192.168.1.5:cw|ip:192.168.1.8:rw

protected String zkCreate(String key,String value,String acls,int createmode,boolean watcher)//acls 为访问权限,结构如:world:anyone:cwrad|ip:192.168.1.5:cw|ip:192.168.1.8:rw

protected byte[] zkGetData(String key)

protected String zkGet(String key)

protected List<String> zkGetChildren(String key)

protected boolean zkSetData(String key,String value)

protected boolean zkDelete(String key)

protected boolean zkExists(String key)

protected boolean zkWatcher(String key)//监听节点的添加、修改、删除,通过监听事件通知

protected String zkGetState()

 

4、关于回调监听类

回调类必须继承于JkasZkWatcher,并覆盖相应方法,如下:

package test.z.zookeeper;

import org.jkas.JkasZkWatcher;

public class Text extends JkasZkWatcher{

 public void zkconnected(){};//连接时调用
 public void zkdisconnected(){};//断开连接时调用
 public void zkcreated(String node,byte[] value){};//创建节点时调用
 public void zkupdated(String node,byte[] value){};//修改节点时调用
 public void zkdeleted(String node){};//删除节点时调用

}

 

     5、分布式锁

    import org.jkas.core.ZkLock;//导入ZkLock

   ZkLock lock=new ZkLock();//实例化 ZkLock

   boolean lock.tryLock(String key)//获取分布式锁,参数key为节点标志,返回true则成功获取,默认30秒没获得锁将超时返回false

   boolean lock.tryLock(String key,int timeout)//获取分布式锁,参数key为节点标志,返回true则成功获取,timeout为超过秒数没获得锁将超时返回false,timeout为0则一直等待直到获得锁

   void lock.unLock(String key);//释放分布式锁

   如:

   ZkLock lock=new ZkLock();
   try{
       if(lock.tryLock("/tttt"))
       {
          echo("获得锁");
       }
     }catch(Exception e){
     }
     finally{
      lock.unLock("/tttt");//无论是否获得锁,一定要释放锁
    }