Eureka 源码解析 —— Eureka-Client 初始化(一)之 EurekaInstanceConfig

  1. 概述
    本文主要分享 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:主机名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值