zookeeper简单命令与java客户端连接

zk常用命令:

进入zk文件夹下:

bin/zkCli.sh -server 127.0.0.1:2181	//连接zk服务器进入客户端

quit  //退出zk客户端

bin/zkServer.sh start	//启动ZK服务

bin/zkServer.sh status	//查看ZK服务状态

bin/zkServer.sh stop	//停止ZK服务

bin/zkServer.sh restart //重启ZK服务

进入客户端:

ls /	//查看

create /node  msg  //新建节点

delete /         //删除节点

set /node  new-msg   //修改节点数据

get /   //获取节点信息

java客户端连接:

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ZkConnecter {

    public static final Logger LOGGER = LoggerFactory.getLogger(ZkConnecter.class);

    public List<String> nodeList = new ArrayList<String>();//存放节点集合,并且监控变化

    public ZooKeeper zooKeeper;

    public ZkConnecter(){}

    public void createData() throws IOException { //向zk中添加数据

        zooKeeper = new ZooKeeper(Constant.url, Constant.SESSION_TIMEOUT, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                //不做事情
            }
        });
        if(zooKeeper != null){
            try {
                Stat stat = zooKeeper.exists(Constant.REGISTRY_PATH, false);
                if(stat == null)
                    zooKeeper.create(Constant.REGISTRY_PATH, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//znode不自动删除
                zooKeeper.create(Constant.DATA_PATH, "yanyingnan最近表现不错".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);//znode自动删除,且下次新建节点序号加一
//                zooKeeper.create(Constant.DATA_PATH, "yanyingnan最近表现不错".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//znod不自动删除,下次就会有冲突报KeeperException异常
            } catch (KeeperException e) {
                LOGGER.error("{}", e);
                e.printStackTrace();
            } catch (InterruptedException e) {
                LOGGER.error("{}", e);
                e.printStackTrace();
            }
            System.out.println("znode节点创建成功,并且数据写入数据成功...");
        }else {
            LOGGER.info("zooKeeper connect is false!!!");
        }
    }

    public void connect() throws IOException {

        zooKeeper = new ZooKeeper(Constant.url, Constant.SESSION_TIMEOUT, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                if(watchedEvent.getState().equals(Event.KeeperState.SyncConnected))
                    doSomething();
                if (watchedEvent.getType() == Event.EventType.NodeChildrenChanged)
                    doSomethingForChanged();
            }
        });
        doSomethingForChanged();//测试doSomethingForChanged()方法
    }

    private void doSomething() {
        System.out.println("业务处理中blablabla...");
    }

    private void doSomethingForChanged() {
        try {
            List<String> childrenList = zooKeeper.getChildren(Constant.REGISTRY_PATH, true);
            List<String> tempList = new ArrayList<String>();
            for (String children : childrenList) {
                byte[] bytes = zooKeeper.getData(Constant.REGISTRY_PATH + "/" + children, false, null);
                tempList.add(new String(bytes));
            }
            this.nodeList = tempList;
            System.out.println("节点数据更新成了:" + nodeList);
        } catch (KeeperException e) {
            LOGGER.error("{}", e);
        } catch (InterruptedException e) {
            LOGGER.error("{}", e);
        }
    }
}
发布了57 篇原创文章 · 获赞 1 · 访问量 6565

猜你喜欢

转载自blog.csdn.net/yanyingnan1357/article/details/92424080