Zookeeper的增删改查Java代码详解编程语言

package zookeeper; 
  
import java.io.IOException; 
import java.security.NoSuchAlgorithmException; 
import java.util.ArrayList; 
import java.util.List; 
  
import org.apache.zookeeper.CreateMode; 
import org.apache.zookeeper.WatchedEvent; 
import org.apache.zookeeper.Watcher; 
import org.apache.zookeeper.ZooDefs.Ids; 
import org.apache.zookeeper.ZooDefs.Perms; 
import org.apache.zookeeper.ZooKeeper; 
import org.apache.zookeeper.data.ACL; 
import org.apache.zookeeper.data.Id; 
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider; 
  
public class ZookeeperClient implements Watcher { 
  
    private static class PropertiesDynLoading { 
  
        public static final String connectString = "192.168.57.128:9181"; 
        public static final int sessionTimeout = 3000; 
        public static final String authScheme = "digest"; 
        public static final String accessKey = "cache:svcctlg"; 
        public static final boolean authentication = false; 
    } 
  
    private ZooKeeper zk; 
  
    /** 
     * 创建zookeeper客户端 
     * 
     * @return 
     */ 
    private boolean createZkClient() { 
        try { 
            zk = new ZooKeeper(PropertiesDynLoading.connectString, PropertiesDynLoading.sessionTimeout, this); 
        } catch (IOException e) { 
            this.log("{}", e); 
            e.printStackTrace(); 
            return false; 
        } 
        if (PropertiesDynLoading.authentication) { 
            zk.addAuthInfo(PropertiesDynLoading.authScheme, PropertiesDynLoading.accessKey.getBytes()); 
        } 
        if (!isConnected()) { 
            log(" ZooKeeper client state [{}]", zk.getState().toString()); 
        } 
        try { 
            if (zk.exists("/zookeeper", false) != null) { 
                log("create ZooKeeper Client Success! connectString", PropertiesDynLoading.connectString); 
                log(" ZooKeeper client state [{}]", zk.getState()); 
                return true; 
            } 
        } catch (Exception e) { 
            this.log("create ZooKeeper Client Fail! connectString", PropertiesDynLoading.connectString); 
            e.printStackTrace(); 
        } 
        return false; 
    } 
  
    /** 
     * 新增持久化节点 
     * 
     * @param path 
     *            节点路径 
     * @param data 
     *            节点数据 
     * @return 
     */ 
    private boolean createPersistentNode(String path, String data) { 
        if (isConnected()) { 
  
            try { 
                if (PropertiesDynLoading.authentication) { 
                    zk.create(path, data.getBytes(), getAdminAcls(), CreateMode.PERSISTENT); 
                } else { 
                    zk.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); 
  
                } 
                return true; 
            } catch (Exception e) { 
                e.printStackTrace(); 
                log("{}", e); 
                return false; 
            } 
  
        } 
        this.log("zookeeper state", zk.getState()); 
        return false; 
    } 
  
    /** 
     * 创建瞬时节点 
     * 
     * @param path 
     * @param data 
     * @return 
     */ 
    private boolean creatEphemeralNode(String path, String data) { 
        if (isConnected()) { 
  
            try { 
                if (PropertiesDynLoading.authentication) { 
                    zk.create(path, data.getBytes(), getAdminAcls(), CreateMode.PERSISTENT); 
                } else { 
                    zk.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); 
                } 
                return true; 
            } catch (Exception e) { 
                e.printStackTrace(); 
                log("{}", e); 
                return false; 
            } 
  
        } 
        this.log("zookeeper state", zk.getState()); 
        return false; 
    } 
  
    /** 
     * 修改数据 
     * 
     * @param path 
     * @param data 
     * @return 
     */ 
    private boolean setNodeData(String path, String data) { 
        if (isConnected()) { 
            try { 
                zk.setData(path, data.getBytes(), -1); 
                return true; 
            } catch (Exception e) { 
                e.printStackTrace(); 
                this.log("{}", e); 
                return false; 
            } 
        } 
        this.log("zookeeper state = [{}]", zk.getState()); 
        return false; 
    } 
  
    /** 
     * 删除节点 
     * 
     * @param path 
     * @return 
     */ 
    private boolean deleteNode(String path) { 
        if (isConnected()) { 
            try { 
                zk.delete(path, -1); 
                return true; 
            } catch (Exception e) { 
                e.printStackTrace(); 
                this.log("{}", e); 
                return false; 
            } 
        } 
        this.log("zookeeper state = [{}]", zk.getState()); 
        return false; 
    } 
  
    /** 
     * 获取节点值 
     * 
     * @param path 
     * @return 
     */ 
    public String getNodeData(String path) { 
        if (isConnected()) { 
            String data = null; 
            try { 
                byte[] byteData = zk.getData(path, true, null); 
                data = new String(byteData, "utf-8"); 
                return data; 
            } catch (Exception e) { 
  
                e.printStackTrace(); 
                this.log("{}", e); 
                return null; 
            } 
        } 
        this.log("zookeeper state = [{}]", zk.getState()); 
        return null; 
    } 
  
    /** 
     * 获取path子节点名列表 
     * 
     * @param path 
     * @return 
     */ 
    public List<String> getChildren(String path) { 
        if (isConnected()) { 
            String data = null; 
            try { 
                return zk.getChildren(path, false); 
            } catch (Exception e) { 
                e.printStackTrace(); 
                this.log("{}", e); 
                return null; 
            } 
        } 
        this.log("zookeeper state = [{}]", zk.getState()); 
        return null; 
    } 
  
    public boolean startZkClient() { 
        return createZkClient(); 
    } 
  
    /** 
     * zookeeper是否连接服务器 
     * 
     * @return 
     */ 
    public boolean isConnected() { 
        return zk.getState().isConnected(); 
    } 
  
    /** 
     * 是否存在path路径节点 
     * 
     * @param path 
     * @return 
     */ 
    public boolean exists(String path) { 
        try { 
            return zk.exists(path, false) != null; 
        } catch (Exception e) { 
  
            this.log("{}", e); 
        } 
        return false; 
    } 
  
    /** 
     * 关闭zookeeper 
     */ 
    public void closeZk() { 
        if (isConnected()) { 
            try { 
                zk.close(); 
                this.log("close zookeeper [{}]", "success"); 
            } catch (InterruptedException e) { 
                this.log("zookeeper state = [{}]", e); 
                e.printStackTrace(); 
            } 
        } else { 
            this.log("zookeeper state = [{}]", zk.getState()); 
        } 
  
    } 
  
    /** 
     * 
     * @return 
     */ 
    public List<ACL> getCreateNodeAcls() { 
        List<ACL> listAcls = new ArrayList<ACL>(3); 
        try { 
            Id id = new Id(PropertiesDynLoading.authScheme, 
                    DigestAuthenticationProvider.generateDigest(PropertiesDynLoading.accessKey)); 
            ACL acl = new ACL(Perms.CREATE, id); 
            listAcls.add(acl); 
  
        } catch (NoSuchAlgorithmException e) { 
  
            e.printStackTrace(); 
            return Ids.OPEN_ACL_UNSAFE; 
        } 
        return listAcls; 
    } 
  
    public List<ACL> getAdminAcls() { 
        List<ACL> listAcls = new ArrayList<ACL>(3); 
        try { 
            Id id = new Id(PropertiesDynLoading.authScheme, 
                    DigestAuthenticationProvider.generateDigest(PropertiesDynLoading.accessKey)); 
            ACL acl = new ACL(Perms.ALL, id); 
            listAcls.add(acl); 
  
        } catch (NoSuchAlgorithmException e) { 
  
            e.printStackTrace(); 
            return Ids.OPEN_ACL_UNSAFE; 
        } 
        return listAcls; 
    } 
  
    public void log(String format, Object args) { 
        int index = format.indexOf("{"); 
        StringBuilder sb = new StringBuilder(format); 
        sb.insert(index + 1, "%s"); 
        System.out.println(String.format(sb.toString(), args)); 
    } 
  
    @Override 
    public void process(WatchedEvent event) { 
    } 
  
    public static void main(String[] args) { 
  
        ZookeeperClient zkc = new ZookeeperClient(); 
        zkc.createZkClient(); 
  
        if (!zkc.exists("/windowcreate")) { 
  
            zkc.createPersistentNode("/windowcreate", "windowcreate"); 
        } 
        if (!zkc.exists("/windowcreate/value")) { 
            System.out.println("not exists /windowcreate/value"); 
  
            zkc.createPersistentNode("/windowcreate/value", "A0431P001"); 
        } 
        if (!zkc.exists("/windowcreate/valuetmp")) { 
            System.out.println("not exists /windowcreate/valuetmp"); 
            zkc.creatEphemeralNode("/windowcreate/valuetmp", "A0431P002"); 
        } 
        System.out.println(zkc.getNodeData("/zookeeper")); 
        System.out.println(zkc.getChildren("/windowcreate")); 
        System.out.println(zkc.getNodeData("/windowcreate/value")); 
        System.out.println(zkc.getNodeData("/windowcreate/valuetmp")); 
        zkc.setNodeData("/windowcreate/value", "A0431P003"); 
        System.out.println(zkc.getNodeData("/windowcreate/value")); 
        zkc.deleteNode("/windowcreate/value"); 
        System.out.println(zkc.exists("/windowcreate/value")); 
        zkc.closeZk(); 
    } 
  
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10734.html

(0)
上一篇 2021年7月19日 10:27
下一篇 2021年7月19日 10:27

相关推荐

发表回复

登录后才能评论