作者:君君6789_903 | 来源:互联网 | 2023-09-23 16:14
我使用集成环境idea来阅读源码,不管是eclipse还是idea下面的方法都适用。
1. 从github上把源码clone下来。
2. 进入主目录,使用ant eclipse
命令来编译工程。(ant需要提前安装)
3. 将工程导入idea。
然后就可以阅读源码了。
对于源码的阅读下面是我的几个心得,写出来分享下:
1. 在阅读zookeeper源码之前,最好还是先了解下zookeeper的应用场景和客户端的基本用法,这样不至于在阅读源码的时候一头雾水。
2. zookeeper是由客户端和服务端两部分组成,服务端又分为单机版和集群版两种(当然是一份代码)。客户端比较简单,而且调试服务端的时候需要客户端发出请求来配合,所以首先推荐阅读客户端的代码。服务端的集群版比较繁琐,如果有志于对zookeeper源码有较深的了解,对于服务端可以先阅读单机版的代码(单机版和集群版共用了很多代码),单机版包括会话、事务日志、快照、责任链、数据库、客户端通信等一些知识点。单机版单机版了解之后,集群版只是在单机版基础上多了leader选举和集群间通信两部分。
3. 阅读源码的正确方式:让项目跑起来,打日志调试。之所以如此是因为开源项目一般都比较大,如果干巴巴地去阅读的话可能会遇到各种坑而浪费很多时间。所以建议把项目实际部署起来,通过添加log的方式阅读源码,这样会事半功倍。
下面分享下windows下面zookeeper部署调试方式:
首先是zookeeper的单机版:
1. 首先构建整个工程,在根目录下使用ant
命令。当出现Build Success,说明构建成功。
2. 将conf文件夹中的zoo_sample.cfg拷贝一份,重命名为zoo.cfg。打开zoo.cfg,将dataDir改为dataDir=D:/zk/data(我的zookeeper工程放在了D:\zk目录下面,windows中目录间分隔用斜杠,不要用反斜杠)
3. 然后就可以启动bin/zkServer.cmd脚本,这时候你会发现工程启动了,但是控制台没有期望的日志输出。这是因为zookeeper没有找到Log4j的jar包,你可以看看build/lib目录下有没有log4j的jar包,如果没有的话你要把需要的jar包拷贝到本目录下面来,在启动脚本,就可以看到控制台日志输出了。
4. 在需要的地方打上log输出,然后ant
重新构建下,再启动服务端,就能看到输出的日志了。
zookeeper的集群版调试:
本集群由三台zookeeper服务器组成。
1. 对于构建成功的一个项目,把它拷贝两份,最终目录如下:
2. 在D:/zk/data下面创建三个目录data1,data2,和data3,并在这三个目录下面分别建一个myid文件,分别对应写入1,2,3。
3. 将zookeeper-1/conf/zoo.cfg中的dataDir改为dataDir=D:/zk/data/data1,并在文件末尾追加:
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
zookeeper-2和zookeeper-3改动如下:
3.1. zookeeper-2/conf/zoo.cfg中的dataDir改为dataDir=D:/zk/data/data2
zookeeper-3/conf/zoo.cfg中的dataDir改为dataDir=D:/zk/data/data3
3.2. zookeeper-2/conf/zoo.cfg中的clientPort改为2182
zookeeper-2/conf/zoo.cfg中的clientPort改为2183
3.3. zookeeper-2和zookeeper-3都在zoo.cfg后追加上面的代码块。
4. 在需要的地方打上log输出,然后ant
重新构建下,再启动服务端,就能看到输出的日志了。
最后介绍客户端的调试方式:
客户端最容易了,首先启动服务端(无论是单机版还是集群版都可以,服务端的模式对客户端透明)。我的项目目录如下所示:
其中main里面是客户端和服务端的代码,test也是源码目录,服务端的调试可以在test目录下新建一个类作为入口:
直接去Zookeeper这个类里面打断点,debug就可以了。