zkCli.sh脚本
这个命令行脚本在bin目录下:
ZOOBIN="${
BASH_SOURCE-$0}"
ZOOBIN="$(dirname "${ZOOBIN}")"
ZOOBINDIR="$(cd "${ZOOBIN}"; pwd)"
# 加载zkEnv.sh脚本
if [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; then
. "$ZOOBINDIR"/../libexec/zkEnv.sh
else
. "$ZOOBINDIR"/zkEnv.sh
fi
ZOO_LOG_FILE=zookeeper-$USER-cli-$HOSTNAME.log
"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.log.file=${ZOO_LOG_FILE}" \
-cp "$CLASSPATH" $CLIENT_JVMFLAGS $JVMFLAGS \
org.apache.zookeeper.ZooKeeperMain "$@"
可以看到使用org.apache.zookeeper.ZooKeeperMain作为主类。
ZooKeeperMain入口类
The command line client to ZooKeeper.
idea运行
main方法入口
public static void main(String[] args) throws IOException, InterruptedException {
ZooKeeperMain main = new ZooKeeperMain(args);
// 执行命令
main.run();
}
public ZooKeeperMain(String[] args) throws IOException, InterruptedException {
// 用于解析命令行选项
// -server host1:port1,host2:port2 -timeout 30000 -r
// -r 表示readonly
cl.parseOptions(args);
System.out.println("Connecting to " + cl.getOption("server"));
// 连接zookeeper服务器
connectToZK(cl.getOption("server"));
}
连接服务器
protected void connectToZK(String newHost) throws InterruptedException, IOException {
// 略
host = newHost;
boolean readOnly = cl.getOption("readonly") != null;
if (cl.getOption("secure") != null) {
System.setProperty(ZKClientConfig.SECURE_CLIENT, "true");
System.out.println("Secure connection is enabled");
}
ZKClientConfig clientConfig = null;
if (cl.getOption("client-configuration") != null) {
try {
clientConfig = new ZKClientConfig(cl.getOption("client-configuration"));
} catch (QuorumPeerConfig.ConfigException e) {
e.printStackTrace();
ServiceUtils.requestSystemExit(ExitCode.INVALID_INVOCATION.getValue());
}
}
if