private static ZooKeeper zk = null;
	//对zk进行初始化,要判断连接成功后才能调用,不判断的话,把zk的超时时间设置长点,不然会包超时错误
    public static void initZook() throws Exception {
        PropertiesHelper atsrootConfig = ATSROOTConfig.getATSROOTConfig();
        String path = (String) atsrootConfig.get("REGISTER.Svr1.Host");
        zk = new ZooKeeper(path, 10000, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                logger.info("ZK mongitor {}", watchedEvent.getState());
            }
        });
        while (true) {
            if (zk.getState() == ZooKeeper.States.CONNECTING) {
                break;
            } else {
                logger.info("ZK mongitor reload connection");
                Thread.sleep(1000);
            }
        }
    }

  public void getZookeeper() throws Exception {
        ls("/MDTService", zk, "1");
    }

//循环获取zk的节点,ip和端口
    public static void ls(String path, ZooKeeper zk, String type)
            throws Exception {
        byte[] bts = zk.getData(path, false, null);
        String str = new String(bts);
        if (str.contains("Stat")){
            logger.info(path + ":" + str);
            String[] serverName = path.split("/");
            MonitorMsg monitor = getMonitor(serverName[serverName.length - 1], str);
            MonitorRockDB.saveMonitor(monitor);
        }

        List<String> list = zk.getChildren(path, null);
        if ((list.isEmpty()) || (list == null)) {
            return;
        }
        for (String s : list) {
            if (path.equals("/"))
                ls(path + s, zk, type);
            else
                ls(path + "/" + s, zk, type);
        }
    }
   private static MonitorMsg getMonitor(String... strings) {
        MonitorMsg msg = new MonitorMsg();
        msg.serverName = strings[0];
        msg.key = "zookeeper";
        msg.desc = strings[1];
        msg.value = 1;
        return msg;
    }

更多推荐