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");//无论是否获得锁,一定要释放锁
}