版本 awsVersion = ‘1.11.277’

LeaseManager 接口管理实例的租约信息,提供以下功能:
- 注册实例
- 取消注册实例
- 实例续约
- 剔除过期实例
public interface LeaseManager<T> {
/*
* 注册实例并续约
*/
void register(T r, int leaseDuration, boolean isReplication);
/**
* 取消注册实例
*/
boolean cancel(String appName, String id, boolean isReplication);
/**
* 续约
*/
boolean renew(String appName, String id, boolean isReplication);
/**
* 剔除过期实例
*/
void evict();
}
InstanceRegistry 接口即注册表服务,继承 LeaseManager 接口,提供以下功能:
- 启动和关闭注册表服务
- 更新注册表中实例的状态
- 从注册表中获取应用信息和实例信息
- 初始化和获取注册表缓存
- 租约过期机制和自我保护机制(和 LeaseManager 的 evict() 方法相关)
public interface InstanceRegistry extends LeaseManager<InstanceInfo>, LookupService<String> {
// ========================
// 启动和关闭注册表服务
// ========================
/**
* 在PeerAwareInstanceRegistry接口的init()和syncUp()方法调用后被调用
* 1.更新expectedNumberOfClientsSendingRenews
* 更新numberOfRenewsPerMinThreshold
* 2.如果从其他Eureka节点拉取注册表成功并且实例数量大于0
* 设置peerInstancesTransferEmptyOnStartup为false
* 和PeerAwareInstanceRegistry接口的shouldAllowAccess()方法相关
* 3.设置startupTime为当前时间
* 4.设置自身实例状态为InstanceStatus.UP
* 5.调用postInit()方法
* 创建EvictionTask并通过Timer调度定时剔除过期实例
* 配置evictionIntervalTimerInMs指定剔除过期实例的时间间隔,默认60s
*/
void openForTraffic(ApplicationInfoManager applicationInfoManager, int count);
void shutdown();
// ========================
// 更新注册表中实例的状态
// ========================
@Deprecated
void storeOverriddenStatusIfRequired(String id, InstanceStatus overriddenStatus);
/**
* 更新注册表中实例的overriddenStatus
*/
void storeOverriddenStatusIfRequired(String appName, String id, InstanceStatus overriddenStatus);
/**
* 更新注册表中实例的overriddenStatus和status
*/
boolean statusUpdate(String appName,
String id,
InstanceStatus newStatus,
String lastDirtyTimestamp,

本文主要介绍了Eureka中InstanceRegistry的实现细节,包括LeaseManager的租约管理功能,如注册、取消注册、续约和剔除过期实例。InstanceRegistry作为注册表服务,提供启动、关闭、状态更新及信息获取等操作。此外,讨论了PeerAwareInstanceRegistry的角色,它实现了与其他Eureka节点的数据同步和拉取。文章还探讨了为何特定方法不在同一接口中声明以及numberOfRenewsPerMinThreshold属性的设计决策。
最低0.47元/天 解锁文章
1461

被折叠的 条评论
为什么被折叠?



