Eureka线程模型

服务端线程

线程
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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。