package com.hqyg.disjob.register.repository; import java.util.Collection; import java.util.List; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.api.transaction.CuratorTransaction; import org.apache.curator.framework.api.transaction.CuratorTransactionFinal; import org.apache.curator.framework.api.transaction.CuratorTransactionResult; import org.apache.zookeeper.data.ACL; import org.apache.zookeeper.data.Stat; import com.hqyg.disjob.common.exception.ZKNodeException; /** * 操作ZooKeeper数据节点的封装 * @author Disjob */ public interface ZnodeApi { /** * 根据path获取节点的stat * Stat对象的属性: * long czxid:即created ZXID,表示该数据节点被创建时的事务ID * long mzxid:即modified ZXID,表示该节点最后一次被更新时的事务ID * long ctime:即created Time,表示节点被创建的时间 * long mtime:即modified Time,表示该节点最后一次被更新的时间 * int version:数据节点的版本号 * int cversion:子节点的版本号 * int aversion:节点的ACL版本号 * long ephemeralOwner:创建该临时节点的回话的sessionID。如果该节点时持久节点,那么这个属性值为0 * int dataLength:数据内容的长度 * int numChildren:当前节点的子节点个数 * long pzxid:表示该节点的子节点列表最后一次被修改时的事务ID * @param znode * @return */ public Stat getStat(CuratorFramework client, String znode) throws ZKNodeException; /** * 检查节点是否存在 * @param znode * @return */ boolean checkExists(CuratorFramework client, String znode) throws ZKNodeException; /** * 根据path获取节点数据 * @param znode * @return String */ String getData(CuratorFramework client, String znode) throws ZKNodeException; /** * 获取某个job 的config 数据 * @param client * @param znode * @return */ public String getJobConfig(CuratorFramework client,String group,String name); public byte[] getByteData(CuratorFramework client, String znode); public <T> T getData(CuratorFramework client, String znode, Class<T> clazz); /** * 根据path获取节点数据 * @param client * @param znode * @return byte [] * @throws ZKNodeException */ public byte [] getDataForBytes(CuratorFramework client, String znode) throws ZKNodeException; List<String> getChildren(CuratorFramework client, String znode) throws ZKNodeException; /** * 创建持久节点,可递归创建 * 若data为null,则创建空节点 * @param znode * @param data */ void createPersistent(CuratorFramework client, String znode, Object data) throws ZKNodeException; void create(CuratorFramework client, String znode, Object data) throws ZKNodeException; public void createPersistent(CuratorFramework client, String znode, List<ACL> aclList); public void createPersistent(CuratorFramework client, String znode, byte[] data, List<ACL> aclList); public void createPersistent(CuratorFramework client, String znode, Object data, List<ACL> list); public CuratorTransactionFinal addCreateToTransaction(CuratorTransaction transaction, String path, String data, List<ACL> aclList); /** * 创建临时节点,可递归创建 * 若data为null,则创建空节点 * @param znode * @param data */ void createEphemeral(CuratorFramework client, String znode, Object data) throws ZKNodeException; void updateWithJson(CuratorFramework client, String znode, Object value); /** * 如果data为null,则此节点无数据 * @param znode * @param value */ void update(CuratorFramework client, String znode, Object data) throws ZKNodeException; /** * 根据版本号更新数据 * @param version * @param znode * @param data */ void update(CuratorFramework client, int version, String znode, Object data) throws ZKNodeException; /** * 根据节点删除,只能删除叶子节点 * @param znode */ void deleteByZnode(CuratorFramework client, String znode) throws ZKNodeException; /** * 根据版本删除 * @param version */ void deleteByVersion(CuratorFramework client, int version, String znode) throws ZKNodeException; /** * 递归删除,及删除一个节点,并递归删除所有子节点 * @param zpath */ void deleteByRecursion(CuratorFramework client, String znode) throws ZKNodeException; /** * 强制保证删除 * @param znode */ void deleteGuaranteed(CuratorFramework client, String znode) throws ZKNodeException; /** * 传入多个节点路径,组成一个全路径 * @param parent * @param firstChild * @param restChildren * @return * @throws ZKNodeException */ String makePath(String parent, String firstChild, String... restChildren ); /** * 创建一个全路径的所有节点 * @param zooKeeper * @param path * @throws ZKNodeException */ void makeDirs(CuratorFramework client, String path) throws ZKNodeException; /** * 事务开始 * @param client * @return */ CuratorTransaction startTransaction(CuratorFramework client); /** * 事务中添加方法 * @param transaction * @param path * @param data * @return * @throws Exception */ CuratorTransactionFinal addCreateToTransaction(CuratorTransaction transaction,String path,String data) throws Exception ; /** * 事务中修改方法 * @param transaction * @param path * @param data * @return * @throws Exception */ CuratorTransactionFinal addUpdateToTransaction(CuratorTransaction transaction,String path,String data) throws Exception ; /** * 事务中删除方法 * @param transaction * @param path * @return * @throws Exception */ CuratorTransactionFinal addDeleteToTransaction(CuratorTransaction transaction,String path) throws Exception ; /** * 事务中提交方法 * @param transaction * @throws Exception */ Collection<CuratorTransactionResult> commitTransaction(CuratorTransactionFinal transaction) throws Exception; public void setACL(CuratorFramework client, String path, List<ACL> acllist); public void createWithJson(CuratorFramework client, String znode, Object data) throws ZKNodeException; }