美文网首页
Eureka源码分析(一) DefaultEurekaClien

Eureka源码分析(一) DefaultEurekaClien

作者: skyguard | 来源:发表于2018-11-09 09:51 被阅读0次

现在我们来开始Eureka源码分析,我们都知道,现在微服务是主流的架构,那么在微服务里用的比较多的框架就是dubbo和spring cloud了,而我们知道dubbbo是用zookeeper作为服务注册中心的,而spring cloud就是用eureka作为服务注册和发现中心。我们就来分析一下eureka是怎么实现服务的注册和发现的。
先从eureka的配置开始,eureka client的配置是由EurekaClientConfig类实现的。默认是DefaultEurekaClientConfig。我们先来看一下DefaultEurekaClientConfig的类的结构


DefaultEurekaClientConfig

我们可以看到,DefaultEurekaClientConfig实现了EurekaClientConfig接口,由DefaultEurekaClientConfigProvider工厂类来生产的。我们再来看一下DefaultEurekaClientConfig的实现

/**
 * 命名空间
 */
private final String namespace;
/**
 * 配置文件对象
 */
private final DynamicPropertyFactory configInstance;
/**
 * HTTP 传输配置
 */
private final EurekaTransportConfig transportConfig;

public DefaultEurekaClientConfig() {
    this(CommonConstants.DEFAULT_CONFIG_NAMESPACE);
}

public DefaultEurekaClientConfig(String namespace) {
    // 设置 namespace,为 "." 结尾
    this.namespace = namespace.endsWith(".")
            ? namespace
            : namespace + ".";
    // 初始化 配置文件对象
    this.configInstance = Archaius1Utils.initConfig(CommonConstants.CONFIG_FILE_NAME);
    // 创建 HTTP 传输配置
    this.transportConfig = new DefaultEurekaTransportConfig(namespace, configInstance);
}

再来分析下DefaultEurekaClientConfig都有哪些方法

  • 直接配合 Eureka-Server URL 相关

    • #getEurekaServerServiceUrls() : Eureka-Server 的 URL 集合。
  • 发现:从 Eureka-Server 获取注册信息相关

    • #shouldFetchRegistry() :是否从 Eureka-Server 拉取注册信息。
    • #getRegistryFetchIntervalSeconds() :从 Eureka-Server 拉取注册信息频率,单位:秒。默认:30 秒。
    • #shouldFilterOnlyUpInstances() :是否过滤,只获取状态为开启( Up )的应用实例集合。
    • #fetchRegistryForRemoteRegions() :TODO[0009]:RemoteRegionRegistry
    • #getCacheRefreshExecutorThreadPoolSize() :注册信息缓存刷新线程池大小。
    • #getCacheRefreshExecutorExponentialBackOffBound() :注册信息缓存刷新执行超时后的延迟重试的时间。
    • #getRegistryRefreshSingleVipAddress() :只获得一个 vipAddress 对应的应用实例们的注册信息。
  • 注册:向 Eureka-Server 注册自身服务

    • #shouldRegisterWithEureka() :是否向 Eureka-Server 注册自身服务。
    • #shouldUnregisterOnShutdown() :是否向 Eureka-Server 取消注册自身服务,当进程关闭时。
    • #getInstanceInfoReplicationIntervalSeconds() :向 Eureka-Server 同步应用实例信息变化频率,单位:秒。
    • #getInitialInstanceInfoReplicationIntervalSeconds() :向 Eureka-Server 同步应用信息变化初始化延迟,单位:秒。
    • #getBackupRegistryImpl() :获取备份注册中心实现类。当 Eureka-Client 启动时,无法从 Eureka-Server 读取注册信息(可能挂了),从备份注册中心读取注册信息。目前 Eureka-Client 未提供合适的实现。
    • #getHeartbeatExecutorThreadPoolSize() :心跳执行线程池大小。
    • #getHeartbeatExecutorExponentialBackOffBound() :心跳执行超时后的延迟重试的时间。

再来看下DefaultEurekaClientConfigProvider的实现

public synchronized EurekaClientConfig get() {
    if (config == null) {
        config = (namespace == null)
                ? new DefaultEurekaClientConfig()
                : new DefaultEurekaClientConfig(namespace);
                
        // TODO: Remove this when DiscoveryManager is finally no longer used
        DiscoveryManager.getInstance().setEurekaClientConfig(config);
    }

    return config;
}

接下来我们再来介绍一个类DefaultEurekaTransportConfig,这个类实现了EurekaTransportConfig接口,是基于文件配置和网络传输的配置实现类。来看下具体的实现

/**
 * 命名空间
 */
private final String namespace;
/**
 * 配置文件对象
 */
private final DynamicPropertyFactory configInstance;

public DefaultEurekaTransportConfig(String parentNamespace, DynamicPropertyFactory configInstance) {
    // 命名空间
    this.namespace = parentNamespace == null
            ? SUB_NAMESPACE
            : (parentNamespace.endsWith(".")
                ? parentNamespace + SUB_NAMESPACE
                : parentNamespace + "." + SUB_NAMESPACE);
    // 配置文件对象
    this.configInstance = configInstance;
}

DefaultEurekaClinetConfig的分析就到这里了。

相关文章

网友评论

      本文标题:Eureka源码分析(一) DefaultEurekaClien

      本文链接:https://www.haomeiwen.com/subject/ovkwxqtx.html