本章,我将在本地搭建Eureka源码环境。这一章,是后续所有Eureka源码解读章节的基础,由于Netflix Eureka是采用Gradle构建的,源码构建环节中会有许多坑,所以读者需要跟随我的步骤,一步步完成Eureka源码的本地构建。
一、本地环境搭建
1.1 Gradle安装
Netflix Eureka项目是用Gradle来构建的,所以先从官网下载Gradle:https://gradle.org/releases/ 。我这里下载的是gradle-2.10
。
接着,设置GRADLE_HOME
环境变量,同时在PATH环境变量中,加入%GRADLE_HOME%/bin
。最后,在cmd命令行中,直接gradle -v
,看到gradle版本信息就代表装好了:
$ gradle -v
------------------------------------------------------------
Gradle 2.10
------------------------------------------------------------
Build time: 2015-12-21 21:15:04 UTC
Build number: none
Revision: 276bdcded730f53aa8c11b479986aafa58e124a6
Groovy: 2.4.4
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM: 1.8.0_111 (Oracle Corporation 25.111-b14)
OS: Windows 10 10.0 amd64
如果要像Maven一样在setting.xml
中设置本地仓库的位置,可以再加一个环境变量的参数GRADLE_USER_HOME
,值设为自己创建的一个gradle仓库的路径,默认是C:\[Users_HOME]\.gradle
。
接着,配置下中央仓库,我这里使用阿里云的maven仓库。在C:\[Users_HOME]\.gradle
目录下新建一个名为init.gradle
的文件:
allprojects{
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
remove repo
}
}
}
maven {
url REPOSITORY_URL
}
}
}
1.2 Eureka源码下载
安装完gradle,就可以通过git clone https://github.com/Netflix/eureka.git
命令获取Eureka源码了。
$ git clone https://github.com/Netflix/eureka.git
Cloning into 'eureka'...
remote: Enumerating objects: 25, done.
remote: Counting objects: 100% (25/25), done.
remote: Compressing objects: 100% (20/20), done.
remote: Total 53593 (delta 4), reused 10 (delta 1), pack-reused 53568
Receiving objects: 100% (53593/53593), 11.66 MiB | 987.00 KiB/s, done.
Resolving deltas: 100% (21038/21038), done.
我这里直接通过Intellij IDEA从Git导入源码:
接着,进入Eureka的根目录,选择你要读的那个版本的源码,比如我这里是执行git checkout v1.7.2
,转到1.7.2版本的源码,后续章节的源码分析都是基于这个版本。
然后,执行gradlew.bat
脚本(我本地是windows),这个脚本会下载Eureka需要的所有依赖,这个过程巨慢无比,耐心等待吧,执行成功后会看到以下信息:
Welcome to Gradle 2.10.
To run a build, run gradlew <task> ...
To see a list of available tasks, run gradlew tasks
To see a list of command-line options, run gradlew --help
To see more detail about a task, run gradlew help --task <task>
BUILD SUCCESSFUL
Total time: 16 mins 47.672 secs
最后,在Eureka根目录执行以下命令,完成项目的构建:
gradle clean build
没有安装Git的童鞋请自行下载安装,我这里就不赘述了。
二、源码结构
Netflix Eureka项目的整体结构如下,本节我会对我们阅读源码需要关注的核心模块进行介绍,其它模块略过即可:
2.1 eureka-client
eureka-client,代表Eureka客户端(Eureka-Client),需要将自己注册到Eureka Server,或从Eureka Server获取服务注册表,同时进行心跳(续租)通信。
2.3 eureka-core
eureka-core,代表Eureka服务端(Eureka-Server),即注册中心,它接收Eureka-Client的服务注册请求,提供服务发现的功能,保持心跳(续约请求),摘除故障服务实例等等。
2.4 eureka-server
eureka-server的本质是一个web应用,它依赖eureka-client
、eureka-core
、eureka-resources
,相当于把它们一起打成一个war包。所以eureka-server既扮演着注册中心角色,也扮演着客户端的角色。
2.5 eureka-resources
Eureka依赖的一些静态资源,JSP资源都在这个包下。
2.6 eureka-examples
包含了大量Eureka的使用示例,后续我们研究Eureka源码时,会运行这些实例观察整个系统的运行过程。
2.7 eureka-test-utils
包含Eureka的各种单元测试工具类。
注:上述包含Jersey的模块,其实是对Jersey这个开源的RESTful框架进行了封装。读者可以把Jersey类比成Spring MVC。Eureka-Client和Eureka-Server之间的通信,都是基于Jersey框架来实现的(http restful接口请求和调用)。所以,eureka-client-jersey2/eureka-core-jersey2,就是Eureka为了方便自己使用,对Jersey框架的一个封装,提供更多的功能。
三、总结
本章,我带领大家在本地搭建起了Eureka源码环境。下一章,我将分析Eureka Server启动的整体流程,因为Eureka-Server同时扮演了Eureka-Client的角色,所以通过整个Eureka Server的启动流程,可以让读者从全局上对Eureka的各个核心概念有一个了解。
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。