1. Eureka 源码
Spring cloud eureka 是在 netflix 的 eureka 基础上进行了封装,加了一些注解,对 springboot 进行支持。学习 eureka 源码,先下载 netflix eureka 源码进行剖析,后面再把 spring cloud eureka 看一下就好了。
Eureka Github 地址:
准备对 Spring Cloud 2020.0.0-RC1 版本(2020-12-11)进行源码学习,对应的是 Spring Cloud Netflix 3.0.0-RC1,根据 maven 仓库的版本看到 netflix eureka 对应的是 1.10.10.
- https://github.com/spring-projects/spring-cloud/wiki
- https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2020.0-Release-Notes
- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-netflix-eureka-server/3.0.0
2. Eureka 源码阅读环境搭建
- IDE:IntelliJ IDEA Community Edition
- 包管理工具:Gradle
- netflix eureka:1.10.10
- 源码下载:https://github.com/Netflix/eureka/archive/refs/tags/v1.10.10.zip
- 下载 gradle 6.3,https://gradle.org/releases/,eureka 源码目录 ./gradle/wrapper/gradle-wrapper.properties 可以找到需要的 gradle 版本;
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip
- 解压,设置 GRADLE_HOME 环境变量:值是 gradle 的解压目录;
- 在 path 环境变量中,加入 %GRADLE_HOME%/bin;
- 在 cmd 终端中运行
gradle -v
检验 gradle 安装成功; - IDEA 中 Open Project 导入 eureka 源码项目
- 项目配置 JDK 8
- 在 build.gradle 中添加内容,解决构建过程中 console 控制台乱码; ```groovy tasks.withType(JavaCompile) { options.encoding = “utf-8” } tasks.withType(Javadoc) { options.encoding = “utf-8” }
```
- Build Project,gradle 构建的过程需要翻墙,不然找不到 plugin 和依赖;
3. Netflix eureka 项目结构
- eureka-client:这个就是指的 eureka 的客户端,注册到 eureka 上面去的一个服务,就是一个 eureka client,无论是你要注册,还是要消费别的服务,无论是服务提供者还是服务消费者,都是一个 eureka 客户端。
- eureka-core:这个就是指的 eureka 的服务端,其实就是 eureka 的注册中心
- eureka-resources:这个是基于 jsp 开发的 eureka 控制台,web 页面,上面你可以看到各种注册服务
- eureka-server:这是把 eureka-client、eureka-core、eureka-resources 打包成了一个 war 包,也就是说 eureka-server 自己本身也是一个 eureka-client,同时也是注册中心,同时也提供 eureka 控制台。真正的使用的注册中心
- eureka-examples:eureka 使用的例子
eureka-test-utils:eureka 的单元测试工具类
4. eureka 源码解读思路
eureka 的核心流程:
服务注册:eureka client 往 eureka server 进行注册的过程;
- 服务发现:eureka client 从 eureka server 获取注册表的过程;
- 服务续约:eureka client 定时往 eureka server 发送续约通知(心跳);
- 服务剔除:eureka server 定时清除失去心跳的 eureka client 的过程;
然后,包含其他的一些底层机制:通信,限流,自我保护,server 集群。
所以先阅读 eureka server 模块的源码,看看 eureka server 是怎样启动的。
eureka 非常适合通过 Test 代码作为入口,来进行阅读,核心机制都能找到专门的测试方法,可以借助这些方法来理解这些机制的实现源码。
参考:
https://blog.csdn.net/bigbigworld_/category_11117072.html