- 概述
本文主要分享 Eureka-Client 自身初始化的过程,不包含 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微服务架构实战》
两书齐买,京东包邮。
推荐 Spring Cloud 视频:
Java 微服务实践 - Spring Boot
Java 微服务实践 - Spring Cloud
Java 微服务实践 - Spring Boot / Spring Cloud
2. EurekaInstanceConfig
com.netflix.appinfo.EurekaInstanceConfig,Eureka 应用实例配置接口。在下文你会看到 EurekaClientConfig 接口,两者的区别如下:
EurekaInstanceConfig,重在应用实例,例如,应用名、应用的端口等等。此处应用指的是,Application Consumer 和 Application Provider。
EurekaClientConfig,重在 Eureka-Client,例如, 连接的 Eureka-Server 的地址、获取服务提供者列表的频率、注册自身为服务提供者的频率等等。
2.1 类关系图
EurekaInstanceConfig 整体类关系如下图:
本文只解析红圈部分类。
EurekaArchaius2ClientConfig 基于 Netflix Archaius 2.x 实现,目前还在开发中,因此暂不解析。
CloudInstanceConfig、Ec2EurekaArchaius2InstanceConfig 基于亚马逊 AWS,大多数读者和我对 AWS 都不了解,因此暂不解析。
2.2 配置属性
点击 EurekaInstanceConfig 查看配置属性简介,已经添加中文注释,可以对照着英文注释一起理解。这里笔者摘出部分较为重要的属性:
getLeaseRenewalIntervalInSeconds() :租约续约频率,单位:秒。应用不断通过按照该频率发送心跳给 Eureka-Server 以达到续约的作用。当 Eureka-Server 超过最大频率未收到续约(心跳),契约失效,进行应用移除。应用移除后,其他应用无法从 Eureka-Server 获取该应用。
getLeaseExpirationDurationInSeconds() :契约过期时间,单位:秒。
getDataCenterInfo() :数据中心信息。com.netflix.appinfo.DataCenterInfo,数据中心信息接口,目前较为简单,标记所属数据中心名。一般情况下,我们使用 Name.MyOwn。接口实现代码如下:
public interface DataCenterInfo {
/**
* 数据中心名枚举
*/
enum Name {
Netflix,
Amazon,
MyOwn
}
/**
* @return 归属的数据中心名
*/
Name getName();
}
getNamespace() :配置命名空间,默认使用 eureka。以 eureka-client.properties 举个例子:
eureka.name=eureka
eureka.port=8080
eureka.vipAddress=eureka.mydomain.net
每个属性最前面的 eureka 即是配置命名空间,一般情况无需修改。
TODO[0004]:健康检查
isInstanceEnabledOnit() :应用初始化后是否开启。在「3. InstanceInfo」详细解析。
2.3 AbstractInstanceConfig
com.netflix.appinfo.AbstractInstanceConfig,Eureka 应用实例配置抽象基类,主要实现一些相对通用的配置,实现代码如下:
public abstract class AbstractInstanceConfig implements EurekaInstanceConfig {
/**
* 契约过期时间,单位:秒
*/
private static final int LEASE_EXPIRATION_DURATION_SECONDS = 90;
/**
* 租约续约频率,单位:秒。
*/
private static final int LEASE_RENEWAL_INTERVAL_SECONDS = 30;
/**
* 应用 https 端口关闭
*/
private static final boolean SECURE_PORT_ENABLED = false;
/**
* 应用 http 端口开启
*/
private static final boolean NON_SECURE_PORT_ENABLED = true;
/**
* 应用 http 端口
*/
private static final int NON_SECURE_PORT = 80;
/**
* 应用 https 端口
*/
private static final int SECURE_PORT = 443;
/**
* 应用初始化后开启
*/
private static final boolean INSTANCE_ENABLED_ON_INIT = false;
/**
* 主机信息
* key:主机 IP 地址
* value:主机名