本文主要基于 Eureka 1.8.X 版本
- 概述
- 2. EurekaClientConfig
2.1 类关系图
2.2 配置属性
2.3 DefaultEurekaClientConfig
2.4 DefaultEurekaClientConfigProvider
2.5 小结
3.1 类关系图
3.2 配置属性
3.3 DefaultEurekaTransportConfig
友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群讨论技术和源码。
1. 概述
本文接《Eureka 源码解析 —— Eureka-Client 初始化(一)之 EurekaInstanceConfig》,主要分享 Eureka-Client 自身初始化的过程的第二部分 —— EurekaClientConfig,不包含 Eureka-Client 向 Eureka-Server 的注册过程( 🙂后面会另外文章分享 )。
Eureka-Client 自身初始化过程中,涉及到主要对象如下图:
- 创建 EurekaInstanceConfig对象
- 使用 EurekaInstanceConfig对象 创建 InstanceInfo对象
- 使用 EurekaInstanceConfig对象 + InstanceInfo对象 创建 ApplicationInfoManager对象
- 创建 EurekaClientConfig对象
- 使用 ApplicationInfoManager对象 + EurekaClientConfig对象 创建 EurekaClient对象
考虑到整个初始化的过程中涉及的配置特别多,拆分成三篇文章:
- (一)EurekaInstanceConfig)
- 【本文】(二)EurekaClientConfig
- (三)EurekaClient
下面我们来看看每个类的实现。
推荐 Spring Cloud 书籍:
- 请支持正版。下载盗版,等于主动编写低级 BUG 。
- 程序猿DD —— 《Spring Cloud微服务实战》
- 周立 —— 《Spring Cloud与Docker微服务架构实战》
- 两书齐买,京东包邮。
2. EurekaClientConfig
com.netflix.discovery.EurekaClientConfig
,Eureka-Client 配置接口。
2.1 类关系图
EurekaClientConfig 整体类关系如下图:
- 本文只解析红圈部分类。
- EurekaArchaius2ClientConfig 基于 Netflix Archaius 2.x 实现,目前还在开发中,因此暂不解析。
2.2 配置属性
点击 EurekaClientConfig 查看配置属性简介,已经添加中文注释,可以对照着英文注释一起理解。这里笔者摘出部分较为重要的属性:
- `#getRegion()` :Eureka-Client 所在区域( `region` )。
- `#getAvailabilityZones()` :Eureka-Client 所在地区( `region` ) 可用区( `zone` )集合。**该参数虽然是数组,第一个元素代表其所在的可用区**。实现代码如下:
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// InstanceInfo.java public static String getZone(String[] availZones, InstanceInfo myInfo) { String instanceZone = ((availZones == null || availZones.length == 0) ? "default" : availZones[0]); if (myInfo != null && myInfo.getDataCenterInfo().getName() == DataCenterInfo.Name.Amazon) { String awsInstanceZone = ((AmazonInfo) myInfo.getDataCenterInfo()) .get(AmazonInfo.MetaDataKey.availabilityZone); if (awsInstanceZone != null) { instanceZone = awsInstanceZone; } } return instanceZone; }
}
return instanceZone;
} #shouldUseDnsForFetchingServiceUrls()
:是否使用 DNS 方式获取 Eureka-Server URL 地址。#getEurekaServerDNSName()
:Eureka-Server 的 DNS 名。#getEurekaServerPort()
:Eureka-Server 的端口。#getEurekaServerURLContext()
:Eureka-Server 的 URL Context 。#getEurekaServiceUrlPollIntervalSeconds()
:轮询获取 Eureka-Server 地址变更频率,单位:秒。默认:300 秒。#shouldPreferSameZoneEureka()
:优先使用相同区(zone
)的 Eureka-Server。#getEurekaServerServiceUrls()
: Eureka-Server 的 URL 集合。实现逻辑和 《Eureka 源码解析 —— 应用实例注册发现 (六)之全量获取》
本系列暂时写对它的源码解析,感兴趣的同学可以看
com.netflix.discovery.shared.transport.EurekaHttpClient#getVip(String, String...)
和com.netflix.eureka.resources.AbstractVIPResource
。#shouldFetchRegistry()
:是否从 Eureka-Server 拉取注册信息。#getRegistryFetchIntervalSeconds()
:从 Eureka-Server 拉取注册信息频率,单位:秒。默认:30 秒。#shouldFilterOnlyUpInstances()
:是否过滤,只获取状态为开启( Up )的应用实例集合。#fetchRegistryForRemoteRegions()
:TODO[0009]:RemoteRegionRegistry#getCacheRefreshExecutorThreadPoolSize()
:注册信息缓存刷新线程池大小。#getCacheRefreshExecutorExponentialBackOffBound()
:注册信息缓存刷新执行超时后的延迟重试的时间。#getRegistryRefreshSingleVipAddress()
:只获得一个vipAddress
对应的应用实例们的注册信息。#shouldRegisterWithEureka()
:是否向 Eureka-Server 注册自身服务。#shouldUnregisterOnShutdown()
:是否向 Eureka-Server 取消注册自身服务,当进程关闭时。#getInstanceInfoReplicationIntervalSeconds()
:向 Eureka-Server 同步应用实例信息变化频率,单位:秒。#getInitialInstanceInfoReplicationIntervalSeconds()
:向 Eureka-Server 同步应用信息变化初始化延迟,单位:秒。#getBackupRegistryImpl()
:获取备份注册中心实现类。当 Eureka-Client 启动时,无法从 Eureka-Server 读取注册信息(可能挂了),从备份注册中心读取注册信息。目前 Eureka-Client 未提供合适的实现。#getHeartbeatExecutorThreadPoolSize()
:心跳执行线程池大小。#getHeartbeatExecutorExponentialBackOffBound()
:心跳执行超时后的延迟重试的时间。
#getRegion()
:Eureka-Client 所在区域(
region
)。
// InstanceInfo.java
public static String getZone(String[] availZones, InstanceInfo myInfo) {
String instanceZone = ((availZones == null || availZones.length == 0) ? “default”
: availZones[0]);
if (myInfo != null
&& myInfo.getDataCenterInfo().getName() == DataCenterInfo.Name.Amazon) {
String awsInstanceZone = ((AmazonInfo) myInfo.getDataCenterInfo())
.get(AmazonInfo.MetaDataKey.availabilityZone);
if (awsInstanceZone != null) {
instanceZone = awsInstanceZone;
}
}
return instanceZone;
}
2.3 DefaultEurekaClientConfig
com.netflix.discovery.DefaultEurekaClientConfig
,基于配置文件的 Eureka-Client 配置实现类,实现代码如下: