大名鼎鼎的Zookeeper是解决分布式问题的神器。小编最近简单阅读了代码,分享一下。有不对之处,还请大家指出。
整篇文章将分多个系列完成,因为涉及点比较多,很难在一片文章内搞定。关于zookeeper的使用场景,大家参考http://rdc.taobao.com/team/jm/archives/1232。api使用参考官网手http://zookeeper.apache.org/doc/trunk/。这里以最新的zookeeper3.4.5为例。
这个系列的第一篇来说说zookeeper server端的启动,以单机为例,分布式zookeeper将在后续专门分析。
单机版启动类ZooKeeperServerMain
- protected void initializeAndRun(String[] args)
- throws ConfigException, IOException
- {
- try {
- ManagedUtil.registerLog4jMBeans();
- } catch (JMException e) {
- LOG.warn("Unable to register log4j JMX control", e);
- }
- //解析配置文件zoo.cfg
- ServerConfig config = new ServerConfig();
- if (args.length == 1) {
- config.parse(args[0]);
- } else {
- config.parse(args);
- }
- //启动
- runFromConfig(config);
- }
protected void initializeAndRun(String[] args)
throws ConfigException, IOException
{
try {
ManagedUtil.registerLog4jMBeans();
} catch (JMException e) {
LOG.warn("Unable to register log4j JMX control", e);
}
//解析配置文件zoo.cfg
ServerConfig config = new ServerConfig();
if (args.length == 1) {
config.parse(args[0]);
} else {
config.parse(args);
}
//启动
runFromConfig(config);
}
具体解析:
- public void parse(String path) throws ConfigException {
- QuorumPeerConfig config = new QuorumPeerConfig();
- config.parse(path);
- // let qpconfig parse the file and then pull the stuff we are
- // interested in
- readFrom(config);
- }