Zookeeper源码解析-源码编译

前言:

    本文开始,要进行Zookeeper的学习了。Zookeeper作为一个优秀的框架,作为注册中心、作为分布式一致性解决方案(等很多场景),基本已经使用在我们工作中的方方面面了。可能大多数人跟笔者一样,都是停留在zookeeper的使用和集群搭建阶段,关于源码没有太多涉猎。

    zookeeper的源码是有java写的版本,所以没有跨语言的障碍。而且目前最新版本的是通过maven来编译的,相比之前ant编译的方式,更有利于我们的学习。

    笔者不打算讲述最新版本的,而是来研究下我们产线环境的稳定版本:Zookeeper-3.4.13

1.环境以及代码准备

1)Jdk6及以上版本

2)Ant(Apache Ant - Binary Distributions),安装到本地

3)zookeeper-3.4.13源码(https://github.com/apache/zookeeper/tree/branch-3.4.13)

2.zookeeper源码编译

1)将上面下载的zookeeper源码解压,笔者解压到E:\zookeeper-branch-3.4.13

2)进入解压目录,执行命令ant eclipse,将文件编译成eclipse工程。最终结果如下

...
[ivy:cachepath]         found org.apache.directory.jdbm#apacheds-jdbm1;2.0.0-M2 in maven2
[ivy:cachepath]         found org.apache.directory.server#apacheds-protocol-ldap;2.0.0-M15 in maven2
[ivy:cachepath]         found org.apache.directory.api#api-ldap-extras-sp;1.0.0-M20 in maven2
[ivy:cachepath]         found org.hamcrest#hamcrest-all;1.3 in maven2
[ivy:cachepath] :: resolution report :: resolve 940ms :: artifacts dl 199ms
        ---------------------------------------------------------------------
        |                  |            modules            ||   artifacts   |
        |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
        ---------------------------------------------------------------------
        |       test       |   71  |   0   |   0   |   0   ||   71  |   0   |
        ---------------------------------------------------------------------
  [eclipse] Writing the preferences for "org.eclipse.jdt.core".
  [eclipse] Writing the preferences for "org.eclipse.core.resources".
  [eclipse] Writing the project definition in the mode "java".
  [eclipse] Writing the classpath definition.

BUILD SUCCESSFUL
Total time: 7 seconds

最终以BUILD SUCCESSFUL结尾,即代表编译成功。

注意:如果没有设置ANT_HOMO path参数,则可以直接使用ant.bat所在全路径,比如笔者设置的如下:

D:\\software\\work-software\\apache-ant-1.10.5-bin\\apache-ant-1.10.5\\bin\\ant.bat eclipse

3)导入项目到idea

这种ant编译的项目,在导入时,选择Import的方式,然后选择Eclipse的方式,后续跟着选择项目目录,以及JDK版本即可

4)碰到的坑

编译完成之后,会发现Version类缺少了一个接口org.apache.zookeeper.version.Info

大家可以通过VerGen.java来主动创建这个接口,也可以直接把接口文件放入org.apache.zookeeper.version下,具体内容如下:

public interface Info {
    int MAJOR = 1;
    int MINOR = 0;
    int MICRO = 0;
    String QUALIFIER = null;
    int REVISION = -1;
    String REVISION_HASH = "1";
    String BUILD_DATE = "2019-3-4";
}

3.项目目录一览

最终项目目录如上所示,bin/目录下就是zk相关命令,zkCli.sh zkServer.sh等

而代码都在src/目录下,如下图所示,在src/java/main/org.apache下是zookeeper的java源码。

jute目录是其自定义的序列化方式;

zookeeper目录则包含了服务端代码以及Zookeeper.java(用于客户端创建连接)

总结:

Zookeeper的源码量并不算大,而且基本都是由java编写的,所以相对比较适合我们的学习。

关于其基本使用,笔者不再赘述,网络上已经有很多文章来介绍了。后续我们先来学习下其自定义的序列化方式,然后再学习下客户端Zookeeper的创建以及交互方式,最后我们学习下最重要的,zookeeper服务端的相关知识点。

猜你喜欢

转载自blog.csdn.net/qq_26323323/article/details/120556010
今日推荐