如何创建一个Eureka Client?
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 代码很长。
- appPathIdentifier,服务实例的标识符, appName,代表了一个服务名称,但是一个服务可能部署多台机器,每台机器上部署的就是一个服务实例,如:serviceABC/001
appPathIdentifier = instanceInfo.getAppName() + "/" + instanceInfo.getId();
- 是否需要注册到别的注册中心。eurekaServer 有个配置:eureka.client.fetchRegistry,单机情况下为 false。false 表示自己就是注册中心。职责就是维护服务实例,并不需要去检索服务。
if (!config.shouldRegisterWithEureka() && !config.shouldFetchRegistry()) {}
- 支持调度的线程池。
scheduler = Executors.newScheduledThreadPool(2,new ThreadFactoryBuilder().setNameFormat("DiscoveryClient-%d").setDaemon(true).build());
- 支持心跳的线程池。
heartbeatExecutor = new ThreadPoolExecutor(1, clientConfig.getHeartbeatExecutorThreadPoolSize(), 0, TimeUnit.SECONDS,new SynchronousQueue<Runnable>(),new ThreadFactoryBuilder().setNameFormat("DiscoveryClient-HeartbeatExecutor-%d").setDaemon(true).build());
- 支持缓存刷新的线程池。
cacheRefreshExecutor = new ThreadPoolExecutor(1, clientConfig.getCacheRefreshExecutorThreadPoolSize(), 0, TimeUnit.SECONDS,new SynchronousQueue<Runnable>(),new ThreadFactoryBuilder().setNameFormat("DiscoveryClient-CacheRefreshExecutor-%d").setDaemon(true).build());
- 支持底层的 eureka client 和 eureka server 进行通信的组件。
eurekaTransport = new EurekaTransport();
- 初始化调度任务。
initScheduledTasks();
总结
先创建了 EurekaInstanceConfig,基于 EurekaInstanceConfig 和 InstanceInfo 创建 ApplicationInfoManager,之后才创建 DiscoveryClient。
如何创建一个Eureka Client?相关推荐
- yy神曲url解析php_使用PHP来简单的创建一个RPC服务
RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ...
- 【Spring】Spring Eureka Client 注册报 registration status: 204
1.概述 想构建一个eureka client连接 eureka server,然后server启动成功了,但是client 却一直连接不上 server配置如下 # Spring 项目名称 spri ...
- php fwrite服务器上写不进去_使用PHP来简单的创建一个RPC服务
RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ...
- SpringCloud创建Eureka Client服务注册
1.说明 本文详细介绍微服务注册到Eureka的方法, 即Eureka Client注册到Eureka Server, 这里用任意一个Spring Cloud服务为例, 比如下面已经创建好的Confi ...
- (转)微服务_创建一个简单的Eureka注册中心
原文地址:https://www.cnblogs.com/lplshermie/p/9105329.html 微服务和分布式已经成了一种极其普遍的技术,为了跟上时代的步伐,最近开始着手学习Spring ...
- SpringCloud Eureka Client和Server侧配置及Eureka高可用配置
一.Eureka注册中心和客户端配置Demo. 1.Server端 a.使用Idea创建Spring项目,如下所示: b.相关配置 application.yaml配置文件如下: # eureka本身 ...
- Spring Cloud(二) 配置Eureka Client
前文回顾: Spring Cloud(一)Eureka Server-单体及集群搭建 本节我们将创建两个Eureka Client,注册到上节中的Eureka Server中,一个作为服务提供方,一个 ...
- Eureka(一): Eureka Client
简介 Eureka是一种基于REST(Representational State Transfer)的服务,主要用于AWS云,用于定位服务,以实现中间层服务器的负载平衡和故障转移.我们将此服务称为E ...
- 4、Eureka 源码解析 之 Eureka Client 启动原理分析
在前面的一篇文章 3.Eureka 源码解析 之 Eureka Server 启动原理分析当中我们分析了一下 Eureka Server 的启动.在集群环境下 Eureka Server 相互之前需要 ...
最新文章
- 03 基本数据类型、运算符 输入输出
- Mybatis原理初探
- linux lanmp 安装教程,linux服务器一键安装包lanmp系列教程之一
- 处女座的测验(一)(互质数)
- 让DIV中文字换行显示
- Tomcat上下文JUnit @Rule
- java流类图结构_java学习之IO流(学习之旅,一)
- java反编译软件_安卓强大的逆向软件,媲美MT管理器!
- 单源最短路径(最短路)
- 如何使用SSH密钥登录你的云服务器?使用SSH密钥的好处
- 这是目前为止5G最完整的PPT
- MOS管防倒灌电路设计及其过程分析
- ant design 时间控件清空值
- PHP实现图片转字符画
- Descriptive Essay文章内容怎么写?
- 计算机分为可编程不可编程,可编程逻辑
- C++ 个人银行账户管理 综合实例62.10_date
- IDL学习:语法基础-过程和函数
- 10024.多媒体短信MMS
- 鸟哥私房菜之计算机常识
热门文章
- 文件表单带数据一起提交spring_基于 Spring 实现管道模式的最佳实践
- java 带点的字符串处理,关于android:java中字符串上带点的分割函数
- 201029阶段二Linux动态库、makefile
- OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结
- Android Studio 2.1.2 升级到 2.2之后,gradle 编译版本更新为2.2.0,databinding报错
- ifconfig命令无法找到,提示bash: ifconfig: command not found
- T-SQL笔记6:GO
- 域名到期续费删除的相关规则
- ***工具CC***的思路及防范方法
- POJ - 3974 Palindrome(二分+哈希/马拉车)