服务端线程
线程 |
|
|
Eureka-DeltaRetentionTimer |
清除注册表中recentlyChangedQueue(最近更新的信息)过期的信息,用作增量更新注册表信息。 |
|
Eureka-EvictionTimer |
eureka回收过期实例线程 |
|
Eureka-MeasureRateTimer |
最近1分钟续约的次数记录 |
|
TaskBatchingWorker/TaskNonBatchingWorker |
集群同步节点线程 |
|
ReplicaAwareInstanceRegistry - RenewalThresholdUpdater |
自动计算自我保护阀值,为了自动保护机制提供参考数据 |
|
Eureka-PeerNodesUpdater |
定时从配置文件中更新集群节点信息 |
|
客户端线程
线程 |
线程作用 |
|
cacheRefresh |
全量或增量同步注册表 |
|
heartbeat |
服务注册与心跳续约 |
|
InstanceInfoReplicator |
同步客户端节点 |
Eureka线程模型

eureka server线程模型.jpg
关键业务对象
租约对象
/**
* 租约
*/
public class Lease<T> {
public static final int DEFAULT_DURATION_IN_SECS = 90;
// 句柄
private T holder;
// 取消注册时间戳
private long evictionTimestamp;
// 注册时间戳
private long registrationTimestamp;
// 开始服务时间戳
private long serviceUpTimestamp;
// 最后更新时间戳
private volatile long lastUpdateTimestamp;
// 租约持续时长,单位:毫秒
private long duration;
}
Instance(实例)
public class InstanceInfo {
private static final String VERSION_UNKNOWN = "unknown";
private static final Logger logger = LoggerFactory.getLogger(InstanceInfo.class);
public static final int DEFAULT_PORT = 7001;
public static final int DEFAULT_SECURE_PORT = 7002;
public static final int DEFAULT_COUNTRY_ID = 1;
/*实例Id。在同一个应用appName中必须是唯一的*/
/*常见的在Spring Cloud的配置是:eureka.instance.instance-id = ${spring.cloud.client.ipAddress}:${spring.application.name}:${server.port}:@project.version@*/
private volatile String instanceId;
/*应用名*/
private volatile String appName;
@Auto
private volatile String appGroupName;
/*本实例IP地址*/
private volatile String ipAddr;
private static final String SID_DEFAULT = "na";
/** @deprecated */
@Deprecated
/*已过期,请忽略*/
private volatile String sid;
/*端口号*/
private volatile int port;
/*securePort 安全端口号*/
private volatile int securePort;
@Auto
/*主页*/
private volatile String homePageUrl;
@Auto
/*状态页*/
private volatile String statusPageUrl;
@Auto
/*健康检查的health*/
private volatile String healthCheckUrl;
@Auto
private volatile String secureHealthCheckUrl;
@Auto
private volatile String vipAddress;
@Auto
private volatile String secureVipAddress;
@XStreamOmitField
private String statusPageRelativeUrl;
@XStreamOmitField
private String statusPageExplicitUrl;
@XStreamOmitField
private String healthCheckRelativeUrl;
@XStreamOmitField
private String healthCheckSecureExplicitUrl;
@XStreamOmitField
private String vipAddressUnresolved;
@XStreamOmitField
private String secureVipAddressUnresolved;
@XStreamOmitField
private String healthCheckExplicitUrl;
/** @deprecated */
@Deprecated
private volatile int countryId;
private volatile boolean isSecurePortEnabled;
private volatile boolean isUnsecurePortEnabled;
private volatile DataCenterInfo dataCenterInfo;
/*主机名*/
private volatile String hostName;
/**
* 实例状态。默认值是InstanceStatus.UP
* starting: 实例初始化状态
* down: 当健康检查失败时,实例的状态转变到down
* up: 正常服务状态
* out_of_service: 不参与接受服务。但是服务正常。
* unknown: 未知状态
*/
private volatile InstanceInfo.InstanceStatus status;
// 对外界展示的实例状态,优先级高于status,可通过restful接口设置,可用于中断部分机器的流量
// 用于升级或排查问题比较方便
private volatile InstanceInfo.InstanceStatus overriddenStatus;
@XStreamOmitField
private volatile boolean isInstanceInfoDirty;
/**
* 租约信息
*/
private volatile LeaseInfo leaseInfo;
@Auto
private volatile Boolean isCoordinatingDiscoveryServer;
/**
* 自定义元数据,可以是任意k-v
*/
@XStreamAlias("metadata")
private volatile Map<String, String> metadata;
/**
* 上次修改时间
*/
@Auto
private volatile Long lastUpdatedTimestamp;
@Auto
private volatile Long lastDirtyTimestamp;
/**
* 动作类型。如ADDED/MODIFIED/DELETED
*/
@Auto
private volatile InstanceInfo.ActionType actionType;
@Auto
private volatile String asgName;
private String version;
}
网友评论