Eureka 学习笔记5:InstanceRegistry

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

版本 awsVersion = ‘1.11.277’

InstanceRegistry


LeaseManager 接口管理实例的租约信息,提供以下功能:

  1. 注册实例
  2. 取消注册实例
  3. 实例续约
  4. 剔除过期实例
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 接口,提供以下功能:

  1. 启动和关闭注册表服务
  2. 更新注册表中实例的状态
  3. 从注册表中获取应用信息和实例信息
  4. 初始化和获取注册表缓存
  5. 租约过期机制和自我保护机制(和 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,
                         
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值