摘要: 原创出处 http://www.iocoder.cn/Eureka/project-structure/ 「芋道源码」欢迎转载,保留摘要,谢谢!
关注 微信公众号:【芋道源码】 有福利:
本文主要分享 Eureka 的项目结构 ,附带部分简介和原理。
Eureka 项目地址: https://github.com/Netflix/eureka
spring-cloud-netflix-eureka-client
/ spring-cloud-netflix-eureka-server
。 Eureka 是 Netflix 开源的服务注册发现组件,分成 Client 和 Server 两部分。简化架构如下图:
Eureka 项目结构如下:
:question::question::question:不只 Eureka-Client 、 Eureka-Server :question::question::question:
淡定。我们一起来了解每个模块的功能和结构。
eureka-client
eureka-client
模块为 Eureka-Client 的功能实现:
com.netflix.appinfo
包:Eureka-Client 的应用配置。此处的应用指的就是上文提到的 Application Provider,Application Consumer。 com.netflix.discovery
包:Eureka-Client 的注册与发现相关功能。
com.netflix.discovery.DiscoveryClient
类:注册发现客户端实现类。 com.netflix.discovery.guice
包:Eureka 计划 使用 Google Guice 实现依赖注入,参见本文「5.1 eureka-server-governator
」。一方面 Guice 是轻量级的依赖注入框架,另一方面避免和业务代码的 Spring 版本冲突。
Guice (pronounced ‘juice’) is a lightweight dependency injection framework for Java 6 and above, brought to you by Google.
com.netflix.discovery.converters
包:Eureka 内部传输数据编解码转换器,支持 XML / JSON 格式。
com.netflix.discovery.endpoint
包:目前该包正在重构,和下文的 com.netflix.discovery.shared.dns
和 com.netflix.discovery.shared.resolver
用途相近。 com.netflix.disvoery.provider
包:目前仅有 DiscoveryJerseyProvider 类。该类声明自定义的 Jersey 请求和响应的序列化和反序列化实现。 com.netflix.disvoery.providers
包:目前仅有 DefaultEurekaClientConfigProvider 类。该类实现 javax.inject.Provider
接口,设置 EurekaClientConfig ( Eureka 客户端配置 ) 的生成工厂。感兴趣的同学,可以点击 《Google-Guice入门介绍》 搜索 Provider 关键字。 com.netflix.discovery.shared
包:Eureka-Client 和 Eureka-Server 注册发现相关的共享重用的代码。下文你会看到,Eureka-Server 通过 eureka-core
模块实现, eureka-core
依赖 eureka-client
。 粗一看,我们会感觉 What ?Eureka-Server 代码依赖 Eureka-Client 代码 !?这个和 Eureka-Server 多节点注册信息 P2P 同步的实现有关。一个 Eureka-Server 收到 Eureka-Client 注册请求后,Eureka-Server 会自己模拟 Eureka-Client 发送注册请求到其它的 Eureka-Server,因此部分实现代码就使用到了这个包,在 《Eureka 源码解析 —— Eureka-Server 集群同步》 详细解析。
com.netflix.discovery.shared.transport
包:Eureka-Client 对 Eureka-Server RESTful 的 HTTP 客户端,基于 Jersey Client 实现。Jersey 在下文「2.1 eureka-client-jersey2
」详细解析。 com.netflix.discovery.shared.dns
包 :DNS 解析器。 com.netflix.discovery.shared.resolver
包:Eureka Endpoint 解析器。在 《Eureka 源码解析 —— EndPoint 与 解析器》 有详细解析。 com.netflix.discovery.util
包 :工具类。
eureka-client-archaius2
Archaius 是 Netflix 开源的配置管理组件。
Archaius 目前有 1.x 和 2.x 版本,默认情况下,Eureka 使用 1.x 版本。从官方文档上来看,2.x 版本仍然在开发中。
FROM eureka-client-archaius2 README
This is a version of eureka-client that has been ported to use Archaius 2.x as the backing configuration system. Please note that this client is still work in progress. This client is also only java8 compatible (as Archaius 2.x is only java8 compatible).
eureka-client-jersey2
Jersey 是 JAX-RS(JSR311)开源参考实现,用于构建 RESTful Web Service。
Jersey 目前有 1.x 和 2.x 版本,默认情况下,Eureka 使用 1.x 版本。从官方文档上来看,2.x 版本由社区实现,Netflix 自己暂未使用。
FROM eureka-client-jersey2 README
Please note that this jersey2 compatible Eureka client (eureka-client-jersey2) is created and maintained by the community. Netflix does not currently use this library internally.
eureka-core
eureka-core
模块为 Eureka-Server 的功能实现:
com.netflix.eureka.EurekaBootStrap
类:Eureka-Server 启动类。 com.netflix.eureka.aws
包:与亚马逊 AWS 服务相关的类。由于笔者和大多数读者都对 AWS 暂不了解,本系列会跳过和 AWS 相关的代码。 com.netflix.eureka.cluster
包:Eureka-Server 集群数据复制相关的代码。 com.netflix.eureka.lease
包:应用注册后的 租约 管理( 注册 / 取消 / 续期 / 过期 )。 com.netflix.eureka.resousrces
包:资源,基于 Jersey Server 实现,相当于 Spring MVC 的控制层代码。 com.netflix.eureka.transport
包:Eureka-Server 对 Eureka-Server 的 RESTful HTTP 客户端,基于 com.netflix.discovery.shared.transport
封装实现。 com.netflix.eureka.util
包:工具类。 eureka-core-jersey2
参见本文「2.1 eureka-client-jersey2
」。
eureka-resources
eureka-resources
模块,使用 JSP 实现 Eureka-Server 的运维后台界面。项目结构如下图:
eureka-server
eureka-server
模块,将 eureka-client
+ eureka-core
+ eureka-resources
三者打包成 Eureka-Server 的 war
包。项目结构如下图:
eureka-server-governator
eureka-server-governator
模块,使用 Netflix Governator 管理 Eureka-Server 的生命周期。
FROM http://www.infoq.com/cn/news/2013/02/netflix-opensource
Governator,一款对 Google Guice 进行扩展的类库,提供了Classpath扫描及自动绑定、生命周期管理、成员属性验证等功能。
目前该模块正在实现阶段。
FROM eureka-server-governator README
This server build is still experimental.
eureka-examples
eureka-examples
模块,提供 Eureka-Client 使用例子。
eureka-test-utils
eureka-test-utils
模块,提供 Eureka 单元测试工具类。
第一篇 Eureka 的文章,如果有地方写的不正确,还望指出,谢谢。
下一篇 Eureka 调试环境搭建。
更多 Eureka 内容,推荐阅读如下文章: