Eureka 源码解析 —— Eureka-Server 启动(二)之 EurekaBootStrap
来源:互联网 发布:淘宝违规没扣分有事吗 编辑:程序博客网 时间:2024/06/04 18:25
摘要: 原创出处 http://www.iocoder.cn/Eureka/eureka-server-init-second/ 「芋道源码」欢迎转载,保留摘要,谢谢!
本文主要基于 Eureka 1.8.X 版本
- 1. 概述
- 2. EurekaBootStrap
- 2.1 初始化 Eureka-Server 配置环境
- 2.2 初始化 Eureka-Server 上下文
- 3. Filter
- 3.1 StatusFilter
- 3.2 ServerRequestAuthFilter
- 3.3 RateLimitingFilter
- 3.4 GzipEncodingEnforcingFilter
- 3.5 ServletContainer
- ServerConfig
- 【本文】EurekaBootStrap
- 请支持正版。下载盗版,等于主动编写低级 BUG 。
- 程序猿DD —— 《Spring Cloud微服务实战》
- 周立 —— 《Spring Cloud与Docker微服务架构实战》
- 两书齐买,京东包邮。
- 调用
#initEurekaEnvironment()
方法,初始化 Eureka-Server 配置环境。 - 调用
#initEurekaServerContext()
方法,初始化 Eureka-Server 上下文。 - 设置基于 Netflix Archaius 实现的配置文件的上下文,从而读取合适的配置文件。大多数情况下,只需要设置
EUREKA_ENVIRONMENT
即可,不同的服务器环境( 例如,PROD
/TEST
等) 读取不同的配置文件。实现原理,在《Eureka 源码解析 —— Eureka-Client 初始化(一)之 EurekaInstanceConfig》「2.4 PropertiesInstanceConfig」有详细解析。 - 感兴趣的也可以阅读:《Netflix Archaius 官方文档 —— Deployment context》。
- 在 《Eureka 源码解析 —— Eureka-Server 启动(一)之 ServerConfig》「2.3 DefaultEurekaServerConfig」 有详细解析。
- 目前 Eureka-Server 提供 V2 版本 API ,如上代码主要对 V1 版本 API 做兼容。可以选择跳过。
- Eureka-Server 内嵌 Eureka-Client,用于和 Eureka-Server 集群里其他节点通信交互。
- Eureka-Client 的初始化过程,在《Eureka 源码解析 —— Eureka-Client 初始化(三)之 EurekaClient》「3. DiscoveryClient」有详细解析。
Eureka-Client 也可以通过 EurekaBootStrap 构造方法传递,实现代码如下:
- 大多数情况下用不到。
应用实例信息的注册表类关系图如下:
本文不展开分享,在《Eureka 源码解析 —— 注册表 InstanceRegistry 类关系》详细解析。
com.netflix.eureka.cluster.PeerEurekaNodes
,Eureka-Server 集群节点集合,在《Eureka 源码解析 —— Eureka-Server 集群同步》详细解析。com.netflix.eureka.EurekaServerContext
,Eureka-Server 上下文接口,提供Eureka-Server 内部各组件对象的初始化、关闭、获取等方法。com.netflix.eureka.EurekaServerContext.DefaultEurekaServerContext
,Eureka-Server 上下文实现类,实现代码如下:com.netflix.eureka.EurekaServerContextHolder
,Eureka-Server 上下文持有者。通过它,可以很方便的获取到 Eureka-Server 上下文,实现代码如下:调用
ServerContext#initialize()
方法,初始化 Eureka-Server 上下文,实现代码如下:- 本文不展开分享,在 《Eureka 源码解析 —— Eureka-Server 集群同步》详细解析。
- 配合 Netflix Servo 实现监控信息采集。
- StatusFilter
- ServerRequestAuthFilter
- RateLimitingFilter
- GzipEncodingEnforcingFilter
- ServletContainer
1. 概述
本文接《Eureka 源码解析 —— Eureka-Server 启动(一)之 EurekaServerConfig》,主要分享 Eureka-Server 启动的过程的第二部分 —— EurekaBootStrap。
考虑到整个初始化的过程中涉及的代码特别多,拆分成两两篇文章:
推荐 Spring Cloud 书籍:
2. EurekaBootStrap
com.netflix.eureka.EurekaBootStrap
,Eureka-Server 启动入口。
EurekaBootStrap 实现了 javax.servlet.ServletContextListener
接口,在 Servlet 容器( 例如 Tomcat、Jetty )启动时,调用 #contextInitialized()
方法,初始化 Eureka-Server,实现代码如下:
2.1 初始化 Eureka-Server 配置环境
2.2 初始化 Eureka-Server 上下文
EurekaBootStrap 的 #initEurekaServerContext()
方法的实现代码相对较多,已经将代码切块 + 中文注册,点击 EurekaBootStrap 链接,对照下面每个小结阅读理解。
2.2.1 创建 Eureka-Server 配置
2.2.2 Eureka-Server 请求和响应的数据兼容
2.2.3 创建 Eureka-Server 请求和响应编解码器
2.2.4 创建 Eureka-Client
2.2.5 创建应用实例信息的注册表
2.2.6 创建 Eureka-Server 集群节点集合
2.2.7 创建 Eureka-Server 上下文
2.2.8 初始化 EurekaServerContextHolder
2.2.9 初始化 Eureka-Server 上下文
2.2.10 从其他 Eureka-Server 拉取注册信息
2.2.11 注册监控
3. Filter
Eureka-Server 过滤器( javax.servlet.Filter
) 顺序如下:
3.1 StatusFilter
com.netflix.eureka.StatusFilter
,Eureka-Server 状态过滤器。当 Eureka-Server 未处于开启( InstanceStatus.UP
)状态,返回 HTTP 状态码 307 重定向,实现代码如下:
3.2 ServerRequestAuthFilter
com.netflix.eureka.ServerRequestAuthFilter
,Eureka-Server 请求认证过滤器。Eureka-Server 未实现认证。目前打印访问的客户端名和版本号,配合 Netflix Servo 实现监控信息采集。实现代码如下:
3.3 RateLimitingFilter
com.netflix.eureka.RateLimitingFilter
,请求限流过滤器。在《Eureka 源码解析 —— 基于令牌桶算法的 RateLimiter》详细解析。
3.4 GzipEncodingEnforcingFilter
com.netflix.eureka.GzipEncodingEnforcingFilter
,GZIP 编码过滤器。
3.5 ServletContainer
com.sun.jersey.spi.container.servlet.ServletContainer
,Jersey MVC 请求过滤器。
Jersey MVC 模式如下图:
FROM 《Jersey框架的MVC》
在
com.netflix.eureka.resources
包里,有所有的 Eureka-Server Jersey Resource ( Controller )。过滤器在
web.xml
配置如下:
- Eureka 源码解析 —— Eureka-Server 启动(二)之 EurekaBootStrap
- Eureka 源码解析 —— Eureka-Server 启动(一)之 ServerConfig
- Eureka 源码解析 —— Eureka-Client 初始化(二)之 EurekaClientConfig
- Eureka 源码解析 —— Eureka-Server 集群同步
- Eureka 源码解析 —— Eureka-Client 初始化(一)之 EurekaInstanceConfig
- Eureka 源码解析 —— Eureka-Client 初始化(三)之 EurekaClient
- Eureka 源码解析 —— 应用实例注册发现(二)之续租
- Eureka 源码解析 —— 任务批处理
- Eureka 源码解析 —— 网络通信
- Eureka 源码解析 —— StringCache
- Eureka 源码解析 —— Eureka源码解析 —— 应用实例注册发现 (九)之岁月是把萌萌的读写锁
- Eureka 源码解析 —— 应用实例注册发现(一)之注册
- Eureka 源码解析 —— 应用实例注册发现(三)之下线
- Eureka 源码解析 —— 应用实例注册发现(四)之自我保护机制
- Eureka 源码解析 —— 应用实例注册发现(五)之过期
- Eureka 源码解析 —— 应用实例注册发现(六)之全量获取
- Eureka 源码解析 —— 应用实例注册发现(七)之增量获取
- Eureka 源码解析 —— 应用实例注册发现(八)之覆盖状态
- line
- maven项目创建入门【傻瓜式教程】
- JAVA后端常用框架SSM,redis,dubbo等
- 第一个ReactNativeDemo:HelloWorld
- 3D 图片折叠
- Eureka 源码解析 —— Eureka-Server 启动(二)之 EurekaBootStrap
- 12.13笔记
- SecureCRT之zmodem transfer canceled by remote side错误
- 文件中的类都不能进行设计,因此未能为该文件显示设计器。
- python---------九九乘法表和直角三角形几种不同表达方式
- ES-API学习笔记
- (wifi)wifi移植之命令行调试driver和supplicant
- Java常见设计模式之单例模式
- 在上传FileUpload上传到tomcat下,重启tomcat后上传的文件消失