
com.baidu.disconf.client.watch.impl.WatchMgrImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of disconf-client Show documentation
Show all versions of disconf-client Show documentation
https://github.com/knightliao/disconf/tree/master/disconf-client
package com.baidu.disconf.client.watch.impl;
import org.apache.zookeeper.CreateMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.baidu.disconf.client.common.model.DisConfCommonModel;
import com.baidu.disconf.client.config.inner.DisClientComConfig;
import com.baidu.disconf.client.core.processor.DisconfCoreProcessor;
import com.baidu.disconf.client.watch.WatchMgr;
import com.baidu.disconf.client.watch.inner.DisconfSysUpdateCallback;
import com.baidu.disconf.client.watch.inner.NodeWatcher;
import com.baidu.disconf.core.common.constants.DisConfigTypeEnum;
import com.baidu.disconf.core.common.path.ZooPathMgr;
import com.baidu.disconf.core.common.utils.ZooUtils;
import com.baidu.disconf.core.common.zookeeper.ZookeeperMgr;
/**
* Watch 模块的一个实现
*
* @author liaoqiqi
* @version 2014-6-10
*/
public class WatchMgrImpl implements WatchMgr {
protected static final Logger LOGGER = LoggerFactory.getLogger(WatchMgrImpl.class);
/**
* zoo prefix
*/
private String zooUrlPrefix;
/**
*
*/
private boolean debug;
/**
* @Description: 获取自己的主备类型
*/
public void init(String hosts, String zooUrlPrefix, boolean debug) throws Exception {
this.zooUrlPrefix = zooUrlPrefix;
this.debug = debug;
// init zookeeper
ZookeeperMgr.getInstance().init(hosts, zooUrlPrefix, debug);
}
/**
* 新建监控
*
* @throws Exception
*/
private String makeMonitorPath(DisConfigTypeEnum disConfigTypeEnum, DisConfCommonModel disConfCommonModel,
String key, String value) throws Exception {
// 应用根目录
/*
应用程序的 Zoo 根目录
*/
String clientRootZooPath = ZooPathMgr.getZooBaseUrl(zooUrlPrefix, disConfCommonModel.getApp(),
disConfCommonModel.getEnv(),
disConfCommonModel.getVersion());
ZookeeperMgr.getInstance().makeDir(clientRootZooPath, ZooUtils.getIp());
// 监控路径
String monitorPath;
if (disConfigTypeEnum.equals(DisConfigTypeEnum.FILE)) {
// 新建Zoo Store目录
String clientDisconfFileZooPath = ZooPathMgr.getFileZooPath(clientRootZooPath);
makePath(clientDisconfFileZooPath, ZooUtils.getIp());
monitorPath = ZooPathMgr.joinPath(clientDisconfFileZooPath, key);
} else {
// 新建Zoo Store目录
String clientDisconfItemZooPath = ZooPathMgr.getItemZooPath(clientRootZooPath);
makePath(clientDisconfItemZooPath, ZooUtils.getIp());
monitorPath = ZooPathMgr.joinPath(clientDisconfItemZooPath, key);
}
// 先新建路径
makePath(monitorPath, "");
// 新建一个代表自己的临时结点
makeTempChildPath(monitorPath, value);
return monitorPath;
}
/**
* 创建路径
*/
private void makePath(String path, String data) {
ZookeeperMgr.getInstance().makeDir(path, data);
}
/**
* 在指定路径下创建一个临时结点
*/
private void makeTempChildPath(String path, String data) {
String finerPrint = DisClientComConfig.getInstance().getInstanceFingerprint();
String mainTypeFullStr = path + "/" + finerPrint;
try {
ZookeeperMgr.getInstance().createEphemeralNode(mainTypeFullStr, data, CreateMode.EPHEMERAL);
} catch (Exception e) {
LOGGER.error("cannot create: " + mainTypeFullStr + "\t" + e.toString());
}
}
/**
* 监控路径,监控前会事先创建路径,并且会新建一个自己的Temp子结点
*/
public void watchPath(DisconfCoreProcessor disconfCoreMgr, DisConfCommonModel disConfCommonModel, String keyName,
DisConfigTypeEnum disConfigTypeEnum, String value) throws Exception {
// 新建
String monitorPath = makeMonitorPath(disConfigTypeEnum, disConfCommonModel, keyName, value);
// 进行监控
NodeWatcher nodeWatcher =
new NodeWatcher(disconfCoreMgr, monitorPath, keyName, disConfigTypeEnum, new DisconfSysUpdateCallback(),
debug);
nodeWatcher.monitorMaster();
}
@Override
public void release() {
try {
ZookeeperMgr.getInstance().release();
} catch (InterruptedException e) {
LOGGER.error(e.toString());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy