zookeeper知识点一(同步创建节点)

来源:互联网 发布:linux dhcp安装 编辑:程序博客网 时间:2024/06/06 17:50

1、同步创建节点

package com.zk.clientapi.one.sync;

import java.io.IOException;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.KeeperException.NoNodeException;
import org.apache.zookeeper.KeeperException.NodeExistsException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;

/**
 * 同步创建节点
 *
 * @version 2016年6月24日上午8:41:34
 * @author wuliu
 */
public class CreateNodeSync implements Watcher {

    private static ZooKeeper zookeeper;
    public static void main(String[] args) throws IOException, InterruptedException {
        zookeeper = new ZooKeeper("127.0.0.1:2181",5000,new CreateNodeSync());
//        zookeeper = new ZooKeeper("123.206.16.33:2181,123.206.16.33:2182,123.206.16.33:2183",5000,new CreateNodeSync());
//        System.out.println(zookeeper.getState());
        Thread.sleep(Integer.MAX_VALUE);
    }
    
    private void syncCreateNode(){
        try {
            String path = zookeeper.create("/syncCreateNode_01", "123456".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            System.out.println("创建的节点的路径是:"+path);
        } catch (KeeperException e) {
            if(e instanceof NodeExistsException){
                System.out.println("创建的节点已经存在");
            }else if(e instanceof NoNodeException){
                System.out.println("父节点不存在");
            }else{
                e.printStackTrace();
            }
        } catch (InterruptedException e) {
            System.out.println("InterruptedException:" + e.getMessage());
        }
    }
    
    @Override
    public void process(WatchedEvent event) {
        // 事件状态为SyncConnected时,说明与服务端的连接已建立好
        System.out.println("事件状态:" + event.getState() +",事件类型:" +  event.getType() +",事件涉及路径:" + event.getPath());
        if (event.getState() == KeeperState.SyncConnected){
            if (event.getType() == EventType.None && null == event.getPath()){
                syncCreateNode();
            }
        }else{
            System.out.println("与服务器断开了链接");
        }
    }
    

}

2、配置设置一

package com.zk;

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.ZooKeeper;

public class SetConfig {

    public static final String url = "127.0.0.1:2181";
    private final static String root = "/myConf";
    private final static String urlNode = root + "/url";
    private final static String usernameNode = root + "/username";
    private final static String passwordNode = root + "/password";
    
    private final static String auth_type = "digest";
    private final static String auth_passwd = "password";
    
    private final static String urlStr = "jdbc:mysql://127.0.0.1:3306/wl";
    private final static String usernameStr = "root";
    private final static String passwordStr = "wl123456";
    
    
    public static void main(String[] args) throws Exception {
        ZooKeeper zk = new ZooKeeper(url, 3000, new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                System.out.println("事件类型:" + event.getType());
            }
        });
        
        while(ZooKeeper.States.CONNECTED != zk.getState()){
            Thread.sleep(3000);
        }
        //addauth digest password
        //DigestAuthenticationProvider.generateDigest("jike:12346")
        zk.addAuthInfo(auth_type, auth_passwd.getBytes());
        
        if(zk.exists(root, true) == null){
            zk.create(root, "root".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
        }
        
        if(zk.exists(urlNode, true) == null){
            zk.create(urlNode, urlStr.getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
        }
        
        if(zk.exists(usernameNode, true) == null){
            zk.create(usernameNode, usernameStr.getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
        }
        
        if(zk.exists(passwordNode, true) == null){
            zk.create(passwordNode, passwordStr.getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
        }
        
    }
}

3、配置设置二

package com.zk;

import org.apache.zookeeper.WatchedEvent;

import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

/**
 * 读数据及监听数据变化
 * @author Administrator
 *
 */
// addauth digest password /myConf
public class SetConfig2 implements Watcher{

    public static String url = "127.0.0.1:2181";
    public static String root = "/myConf";
    
    public static String authType = "digest";
    public static String authPasswd = "password";

    //数据库连接三个配置项
    private final static String urlNode = root + "/url";
    private final static String usernameNode = root + "/username";
    private final static String passwordNode = root + "/password";
    
    ZooKeeper zk = null;
        
    private String urlStr;
    private String usernameStr;
    private String passwordStr;
    
    public String getUrlStr() {
        return urlStr;
    }


    public void setUrlStr(String urlStr) {
        this.urlStr = urlStr;
    }


    public String getUsernameStr() {
        return usernameStr;
    }


    public void setUsernameStr(String usernameStr) {
        this.usernameStr = usernameStr;
    }


    public String getPasswordStr() {
        return passwordStr;
    }


    public void setPasswordStr(String passwordStr) {
        this.passwordStr = passwordStr;
    }
    
    public void initValue(){
        try {
            urlStr = new String(zk.getData(urlNode, true, null));
            usernameStr = new String(zk.getData(usernameNode, true, null));
            passwordStr = new String(zk.getData(passwordNode, true, null));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public ZooKeeper getZK() throws Exception{
        zk = new ZooKeeper(url,3000,this);
        zk.addAuthInfo(authType, authPasswd.getBytes());
        while(zk.getState() != ZooKeeper.States.CONNECTED){
            Thread.sleep(3000);
        }
        System.out.println("连接服务器成功!");
        
        return zk;
    }
    
    public static void main(String[] args) throws Exception{
        SetConfig2 zkTest = new SetConfig2();
        ZooKeeper zk = zkTest.getZK();
        zkTest.initValue();
        
        int i = 0;
        while(true){
            System.out.println(zkTest.getUrlStr());
            System.out.println(zkTest.getUsernameStr());
            System.out.println(zkTest.getPasswordStr());
            Thread.sleep(10000);
            i ++ ;
            if(i == 10){
                break;
            }
        }
        
        zk.close();
    }
    
    
    @Override
    public void process(WatchedEvent event) {
        if(event.getType() == Watcher.Event.EventType.None){
            System.out.println("Connect to the server");
        }else if(event.getType() == Watcher.Event.EventType.NodeCreated){
            System.out.println("节点创建成功!");
        }else if(event.getType() == Watcher.Event.EventType.NodeChildrenChanged){
            System.out.println("子节点更新成功!");
            //读取新的配置
            initValue();
        }else if(event.getType() == Watcher.Event.EventType.NodeDataChanged){
            System.out.println("节点更新成功!");
            initValue();
        }else if(event.getType() == Watcher.Event.EventType.NodeDeleted){
            System.out.println("节点删除成功!");
        }else{
            System.out.println("------------" + event.getType());
        }
    }

}



0 0
原创粉丝点击