我在使用IDEA导入zookeeper并且尝试运行时,遇到了很多的问题, 如果大家也遇到类似的需求,可以参考这篇文章来做
我会基于ant和maven两种形式来构建zookeeper的源码
在github上搜索zookeeper
, 一般来说,第一个结果就是zookeeper的源码
也可以通过直达通道快速进去
我们下载源码,一定不要直接clone他的正在维护的分支,而是要进入release
菜单,下载对外发布的版本。
本次操作我们使用zookeeper-3.5.5版本。
下载zip
或者tar.gz
都可以。也可以通过直达通道直接下载
zookeeper默认是基于ant来构建,如果有同学不了解ant,也没必要学习了,毕竟现在使用ant来构建项目的已经很少了。
ant的下载地址https://ant.apache.org/bindownload.cgi
下载好之后,在环境变量里面配置几个东西
ANT_HOMT=${ant_home} //ant_home为自己本地安装的目录
PATH=%ANT_HOME%/bin
CLASSPATH=%ANT_HOME%/lib
配置好之后,就可以在cmd中执行ant -version. 会得到下面这段信息,说明安装成功
Apache Ant(TM) version 1.9.14 compiled on March 12 2019
由于我们会用两种形式来构建,所以也需要把maven的环境配置好。
maven的下载地址http://maven.apache.org/download.cgi
我下载的是apache-maven-3.6.1-bin.tar.gz
只需要解压到指定目录就行
配置环境变量
M2_HOME=${maven_home} //替换成自己解压出来的目录
PATH=%M2_HOME%/bin
同样,输入mvn -version
命令,如果得到下面的信息,说明安装成功
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /Users/xxx/Documents/software/apache-maven-3.5.0
需要注意的是,如果要用到maven来构建,会要从远程私服上下载jar包,默认会从中央仓库上下载,速度很慢。可以把maven的远程私服改成阿里的仓库,具体的教程我就不再这里说明,大家可以搜索下关键字【maven 阿里】就会有相应的教程来指导
进入到zookeeper解压的根目录下,执行
ant eclipse
显示如下结果,表示编译成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VtYVXchg-1611977314692)(https://istio.tech/images/pasted-11.png)]
选择import project
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3DYNz3k9-1611977314694)(https://istio.tech/images/pasted-12.png)]
接着,选择eclipse,然后一直下一步就行
针对单机版本和集群版本,分别对应两个启动类
单机:ZooKeeperServerMain
集群:QuorumPeerMain
源码调试,不需要搭建集群,所以直接基于单机环境来启动即可
按照下面这个位置进行配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wLH2gpwd-1611977314698)(https://istio.tech/images/pasted-14.png)]
红色标注部分,分别是ZookeeperServerMain这个类的位置。以及main方法的启动参数zoo.cfg
zoo.cfg默认是不存在的,但是在源码根目录有一个conf目录,里面提供了zoo_sample.cfg。 我们只需要复制一份改一个名字即可
配置好之后,直接启动即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pcNAClD1-1611977314702)(https://istio.tech/images/pasted-17.png)]
默认情况下,控制台没有把日志打印出来,应该是没有找到log4j.properties。
配置如下jvm启动参数,指定log4j.properties路径即可
-Dlog4j.configuration=file:/Users/mic/Documents/software/opensource/zookeeper-release-3.5.5/conf/log4j.properties
启动之后,会输出如下日志,表示启动成功, 默认使用2181
的端口号。
2019-07-18 09:49:28,391 [myid:] - INFO [main:JettyAdminServer@112] - Started AdminServer on address 0.0.0.0, port 8080 and command URL /commands
2019-07-18 09:49:28,401 [myid:] - INFO [main:ServerCnxnFactory@135] - Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory
2019-07-18 09:49:28,407 [myid:] - INFO [main:NIOServerCnxnFactory@673] - Configuring NIO connection handler with 10s sessionless connection timeout, 1 selector thread(s), 8 worker threads, and 64 kB direct buffers.
2019-07-18 09:49:28,410 [myid:] - INFO [main:NIOServerCnxnFactory@686] - binding to port 0.0.0.0/0.0.0.0:2181
用zkCli工具来连接。
执行:./zkCli.sh -server 服务器ip:2181
使用telent 命令, 可以测试
telnet ip 2181
zookeeper源码没有使用maven来构建,如果一定要用maven,可以自己创建一个maven工程。把zookeeper-server的代码全部拷贝过来即可。
其实本质上就是,自己把它改造成一个maven项目