private void setPhpClientList(ZKManager zkmanager) { List<String> phpClients = zkmanager.getPhpClient(); Map<String, String> generatePathMap = this.zkmanager.getGeneratePath(); String zkRootPath = zkmanager.getZkRootPath(); if (!phpClients.isEmpty()) { for (String path : phpClients) { PhpClientDO client = new PhpClientDO(); String[] strs = path.split(FileUtil.SPLIT_STR); client.setAppName(strs[0]); client.setDbConfigName(strs[1]); client.setGenerateFilePath(generatePathMap.get(strs[0])); client.setChildPath(zkRootPath + ZKManager.ZK_SEPARATOR + path + "/base_config"); client.setNodePath(zkRootPath + ZKManager.ZK_SEPARATOR + path); phpClientList.add(client); } } }
@Override public void process(WatchedEvent event) { log.info("已经触发了" + event.getType() + "事件!"); String event_path = event.getPath(); ZooKeeper zookeeper = zkmanager.getZookeeper(); if (event.getType() == Event.EventType.NodeDataChanged) { try { if (!this.phpClientList.isEmpty()) { for (PhpClientDO client : this.phpClientList) { String baseConfigPath = client.getChildPath(); if (baseConfigPath.equals(event_path)) { String app_db_name_path = client.getNodePath(); String db_config_name = client.getDbConfigName(); List<String> list = new ArrayList<String>(); byte[] bytes = new byte[0]; if (zookeeper.exists(baseConfigPath, false) != null) { bytes = zookeeper.getData(baseConfigPath, true, null); } if (zookeeper.exists(app_db_name_path, false) != null) { list = zookeeper.getChildren(app_db_name_path, true); } log.info("NodeDataChanged path is : " + event_path); String str = FileUtil.listToString(list, bytes, db_config_name); FileUtil.writeFile(client.getGenerateFilePath(), "<?php\n" + str); } } } } catch (KeeperException e) { log.error(e.getMessage()); } catch (InterruptedException e) { log.error(e.getMessage()); } } if (event.getType() == Event.EventType.NodeChildrenChanged) { try { if (!this.phpClientList.isEmpty()) { for (PhpClientDO client : this.phpClientList) { String app_db_name_path = client.getNodePath(); if (app_db_name_path.equals(event_path)) { String baseConfigPath = client.getChildPath(); String db_config_name = client.getDbConfigName(); List<String> list = new ArrayList<String>(); byte[] bytes = new byte[0]; if (zookeeper.exists(baseConfigPath, false) != null) { bytes = zookeeper.getData(baseConfigPath, true, null); } if (zookeeper.exists(app_db_name_path, false) != null) { list = zookeeper.getChildren(app_db_name_path, true); } log.info("NodeChildrenChanged path is : " + event_path); String str = FileUtil.listToString(list, bytes, db_config_name); FileUtil.writeFile(client.getGenerateFilePath(), "<?php\n" + str); } } } } catch (KeeperException e) { log.error(e.getMessage()); } catch (InterruptedException e) { log.error(e.getMessage()); } } else if (event.getState() == KeeperState.SyncConnected) { log.info("收到ZK连接成功事件!"); } else if (event.getState() == KeeperState.Expired) { log.error("会话超时,等待重新建立ZK连接..."); try { zkmanager.reConnection(); if (!this.phpClientList.isEmpty()) { for (PhpClientDO client : this.phpClientList) { if (zookeeper.exists(client.getNodePath(), false) != null) { this.zkmanager.getZookeeper().getChildren(client.getNodePath(), true); } if (zookeeper.exists(client.getChildPath(), false) != null) { this.zkmanager.getZookeeper().getData(client.getChildPath(), true, null); } } } } catch (Exception e) { log.error(e.getMessage()); } } }