EurekaInstanceConfig & EurekaClientConfig

Instance 是实例的意思, EurekaInstanceConfig 就是 eureka client 的配置文件中的服务实例信息。

 EurekaInstanceConfig instanceConfig = isCloud(ConfigurationManager.getDeploymentContext())? new CloudInstanceConfig(): new MyDataCenterInstanceConfig();applicationInfoManager = new ApplicationInfoManager(instanceConfig, new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get());EurekaClientConfig eurekaClientConfig = new DefaultEurekaClientConfig();

EurekaInstanceConfig 就是将 eureka-client.properties 文件中的服务实例信息加载到 ConfigManager 中,然后基于 EurekaInstanceConfig 对外暴露接口,并且提供配置项的默认值。

ApplicationInfoManager,包含了服务实例的信息、配置,作为服务实例管理的一个组件,由 EurekaInstanceConfig 和 InstanceInfo 构建完成,InstanceInfo 的创建是在 new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get() 中,用了构造器模式 LeaseInfo.Builder.newBuilder() 构造了一个复杂的代表一个服务实例的 InstanceInfo 对象。核心思想就是在 EurekaInstanceConfig 中读取各种实例相关的配置信息,再构造了一些其他的对象,最终完成 InstanceInfo 对象的构建。

public synchronized InstanceInfo get() {if (instanceInfo == null) {// Build the lease information to be passed to the server based on configLeaseInfo.Builder leaseInfoBuilder = LeaseInfo.Builder.newBuilder().setRenewalIntervalInSecs(config.getLeaseRenewalIntervalInSeconds()).setDurationInSecs(config.getLeaseExpirationDurationInSeconds());if (vipAddressResolver == null) {vipAddressResolver = new Archaius1VipAddressResolver();}//代码太长,省略其他代码}
}

DefaultEurekaClientConfig 就是和 DefaultEurekaServerConfig 一样,读取 erueka-client.properties 配置文件的内容。具体方法在 com.netflix.discovery.internal.util.initConfig() 中。最后都是交给 ConfigurationManager 管理。

EurekaInstanceConfig 和 EurekaClientConfig 虽然都是读取的 erueka-client.propeties ,但是读取的内容是不一样的。

EurekaInstanceConfig 接口

EurekaClientConfig 接口

DiscoveryClient

DiscoveryClient 是创建 Erueka Client 的类,由 ApplicationInfoManager 和 EurekaClientConfig 组成。

eurekaClient = new DiscoveryClient(applicationInfoManager, eurekaClientConfig);

DiscoveryClient 代码很长。

  1. appPathIdentifier,服务实例的标识符, appName,代表了一个服务名称,但是一个服务可能部署多台机器,每台机器上部署的就是一个服务实例,如:serviceABC/001
appPathIdentifier = instanceInfo.getAppName() + "/" + instanceInfo.getId();
  1. 是否需要注册到别的注册中心。eurekaServer 有个配置:eureka.client.fetchRegistry,单机情况下为 false。false 表示自己就是注册中心。职责就是维护服务实例,并不需要去检索服务。
if (!config.shouldRegisterWithEureka() && !config.shouldFetchRegistry()) {}
  1. 支持调度的线程池。
scheduler = Executors.newScheduledThreadPool(2,new ThreadFactoryBuilder().setNameFormat("DiscoveryClient-%d").setDaemon(true).build());
  1. 支持心跳的线程池。
heartbeatExecutor = new ThreadPoolExecutor(1, clientConfig.getHeartbeatExecutorThreadPoolSize(), 0, TimeUnit.SECONDS,new SynchronousQueue<Runnable>(),new ThreadFactoryBuilder().setNameFormat("DiscoveryClient-HeartbeatExecutor-%d").setDaemon(true).build());
  1. 支持缓存刷新的线程池。
cacheRefreshExecutor = new ThreadPoolExecutor(1, clientConfig.getCacheRefreshExecutorThreadPoolSize(), 0, TimeUnit.SECONDS,new SynchronousQueue<Runnable>(),new ThreadFactoryBuilder().setNameFormat("DiscoveryClient-CacheRefreshExecutor-%d").setDaemon(true).build());
  1. 支持底层的 eureka client 和 eureka server 进行通信的组件。
eurekaTransport = new EurekaTransport();
  1. 初始化调度任务。
initScheduledTasks();

总结

先创建了 EurekaInstanceConfig,基于 EurekaInstanceConfig 和 InstanceInfo 创建 ApplicationInfoManager,之后才创建 DiscoveryClient。

如何创建一个Eureka Client?相关推荐

  1. yy神曲url解析php_使用PHP来简单的创建一个RPC服务

    RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ...

  2. 【Spring】Spring Eureka Client 注册报 registration status: 204

    1.概述 想构建一个eureka client连接 eureka server,然后server启动成功了,但是client 却一直连接不上 server配置如下 # Spring 项目名称 spri ...

  3. php fwrite服务器上写不进去_使用PHP来简单的创建一个RPC服务

    RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ...

  4. SpringCloud创建Eureka Client服务注册

    1.说明 本文详细介绍微服务注册到Eureka的方法, 即Eureka Client注册到Eureka Server, 这里用任意一个Spring Cloud服务为例, 比如下面已经创建好的Confi ...

  5. (转)微服务_创建一个简单的Eureka注册中心

    原文地址:https://www.cnblogs.com/lplshermie/p/9105329.html 微服务和分布式已经成了一种极其普遍的技术,为了跟上时代的步伐,最近开始着手学习Spring ...

  6. SpringCloud Eureka Client和Server侧配置及Eureka高可用配置

    一.Eureka注册中心和客户端配置Demo. 1.Server端 a.使用Idea创建Spring项目,如下所示: b.相关配置 application.yaml配置文件如下: # eureka本身 ...

  7. Spring Cloud(二) 配置Eureka Client

    前文回顾: Spring Cloud(一)Eureka Server-单体及集群搭建 本节我们将创建两个Eureka Client,注册到上节中的Eureka Server中,一个作为服务提供方,一个 ...

  8. Eureka(一): Eureka Client

    简介 Eureka是一种基于REST(Representational State Transfer)的服务,主要用于AWS云,用于定位服务,以实现中间层服务器的负载平衡和故障转移.我们将此服务称为E ...

  9. 4、Eureka 源码解析 之 Eureka Client 启动原理分析

    在前面的一篇文章 3.Eureka 源码解析 之 Eureka Server 启动原理分析当中我们分析了一下 Eureka Server 的启动.在集群环境下 Eureka Server 相互之前需要 ...

最新文章

  1. 03 基本数据类型、运算符 输入输出
  2. Mybatis原理初探
  3. linux lanmp 安装教程,linux服务器一键安装包lanmp系列教程之一
  4. 处女座的测验(一)(互质数)
  5. 让DIV中文字换行显示
  6. Tomcat上下文JUnit @Rule
  7. java流类图结构_java学习之IO流(学习之旅,一)
  8. java反编译软件_安卓强大的逆向软件,媲美MT管理器!
  9. 单源最短路径(最短路)
  10. 如何使用SSH密钥登录你的云服务器?使用SSH密钥的好处
  11. 这是目前为止5G最完整的PPT
  12. MOS管防倒灌电路设计及其过程分析
  13. ant design 时间控件清空值
  14. PHP实现图片转字符画
  15. Descriptive Essay文章内容怎么写?
  16. 计算机分为可编程不可编程,可编程逻辑
  17. C++ 个人银行账户管理 综合实例62.10_date
  18. IDL学习:语法基础-过程和函数
  19. 10024.多媒体短信MMS
  20. 鸟哥私房菜之计算机常识

热门文章

  1. 文件表单带数据一起提交spring_基于 Spring 实现管道模式的最佳实践
  2. java 带点的字符串处理,关于android:java中字符串上带点的分割函数
  3. 201029阶段二Linux动态库、makefile
  4. OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结
  5. Android Studio 2.1.2 升级到 2.2之后,gradle 编译版本更新为2.2.0,databinding报错
  6. ifconfig命令无法找到,提示bash: ifconfig: command not found
  7. T-SQL笔记6:GO
  8. 域名到期续费删除的相关规则
  9. ***工具CC***的思路及防范方法
  10. POJ - 3974 Palindrome(二分+哈希/马拉车)