说到源码分析,其实刚开始的时候我也一样,不知道从何下手,毕竟不是自己参与过的代码,根本不知道从何看起,看着密密麻麻的字母都感到一阵头疼,但是如果是自己参与过的项目的话,肯定就知道业务逻辑了,知道怎么回事了,说到这里,灵光一闪,要是自己参与的?首要如果是自己要参与一个项目的话,得知道这个项目是怎么回事吧,它用来解决什么问题的,我们又该来如何实现呢?
好了,说到这里我们就来看一看netflix eureka是用来做什么的?通过官网或者百度我们了解到eureka是用做注册中心的,也就是说用来统一管理各个服务节点,然后统一通过注册中心来对服务节点服务的调用来进行分配,这样就避免了我们在分布式使用的时候需要管理一大堆混乱的ip转换。这里eureka实现了C(最终一致性)A(可用性)P(分区容错性)理论中的AP,因为它只需要保证各个服务的可用和部分服务失效就可以了。
接下来我们考虑下以下问题:
1.在spring cloud 中怎么和netflix eureka结合
2.客户端怎么向服务端注册的
3.同一服务的多个实例是怎么保存的
4.客户端是怎么与服务端保持连接的
5.服务端怎么接收注册信息
6.多个服务端是怎么实现高可用的
7.服务端是怎么保证数据同步的,怎么防止消息的循环传播
8.客户端下线后如何删除客户端
9.如果是因为网络抖动造成的客户端下线,服务端如何实现自我保护机制
我们接下来首先分析下spring-cloud-neflix-eureka-client端的代码,现在分析的源码是2019.4.2之前的,通过spring我们知道,如果想要在其他地方引入一个其他项目中的类或者配置的话,最好的方法就是在resources目录下新建一个META-INFO文件夹,然后在该文件夹下面定义一个spring.factories文件,当然如果很熟悉spring boot或spring cloud 代码的同学,我们也会想到代码中肯定会有名字叫xxxAutoConfiguration的自动配置类来实现,我们还是通过spring.factories文件去看吧。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.netflix.eureka.config.EurekaClientConfigServerAutoConfiguration,\
org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceAutoConfiguration,\
org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration,\
org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration,\
org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceBootstrapConfiguration
通过上面的配置我们发现了有一个
EurekaClientAutoConfiguration的自动配置类,这个看来就是我们主要需要分析的类了,进入该类通过下图可以看到类的整体中的方法及字段
通过上面的图片我们可以看到有eureka客户端的注册、客户端的初始化、实例的初始化等方法,在接下来的文章中我们会依次的介绍相关实现。
同时在进入EurekaClientAutoConfiguration类的时候,我们也可以看到在类上面有很多注解,相应的注解的含义就不解释了,主要就是做一些初始化操作的,后面需要的时候会介绍到,这里首先看下EurekaClientConfigBean这个bean类,从名字我们就可以看出它是一个eureka客户端的配置类,进入到该类看到在类上面有@ConfigurationProperties(EurekaClientConfigBean.PREFIX)这个注解,说明它的配置结构是eureka.client开头的,这里默认提供了一些配置,需要注意的是如果没有提供服务端的注册地址,默认会使用DEFAULT_URL="http://localhost:8761" + DEFAULT_PREFIX的地址,如果服务端又没有提供该地址的话就会注册报错;在该类中还提供了一个
@NestedConfigurationProperty
private EurekaTransportConfig transport = new CloudEurekaTransportConfig();
属性,这个我们不能在外面去手动配置,这里是固定了的。
我们看下eureka.client的配置如下:
#该客户端是否可用,默认为true
eureka.client.enabled=true
#实例是否在eureka服务器上注册自己的信息以供其他服务发现,默认为true
eureka.client.register-with-eureka=false
#此客户端是否获取eureka服务器注册表上的注册信息,默认为true
eureka.client.fetch-registry=false
#是否过滤掉,非UP的实例。默认为true
eureka.client.filter-only-up-instances=true
#与Eureka注册服务中心的通信zone和url地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
#client连接Eureka服务端后的空闲等待时间,默认为30 秒
eureka.client.eureka-connection-idle-timeout-seconds=30
#client连接eureka服务端的连接超时时间,默认为5秒
eureka.client.eureka-server-connect-timeout-seconds=5
#client对服务端的读超时时长
eureka.client.eureka-server-read-timeout-seconds=8
#client连接all eureka服务端的总连接数,默认200
eureka.client.eureka-server-total-connections=200
#client连接eureka服务端的单机连接数量,默认50
eureka.client.eureka-server-total-connections-per-host=50
#执行程序指数回退刷新的相关属性,是重试延迟的最大倍数值,默认为10
eureka.client.cache-refresh-executor-exponential-back-off-bound=10
#执行程序缓存刷新线程池的大小,默认为5
eureka.client.cache-refresh-executor-thread-pool-size=2
#心跳执行程序回退相关的属性,是重试延迟的最大倍数值,默认为10
eureka.client.heartbeat-executor-exponential-back-off-bound=10
#心跳执行程序线程池的大小,默认为5
eureka.client.heartbeat-executor-thread-pool-size=5
# 询问Eureka服务url信息变化的频率(s),默认为300秒
eureka.client.eureka-service-url-poll-interval-seconds=300
#最初复制实例信息到eureka服务器所需的时间(s),默认为40秒
eureka.client.initial-instance-info-replication-interval-seconds=40
#间隔多长时间再次复制实例信息到eureka服务器,默认为30秒
eureka.client.instance-info-replication-interval-seconds=30
#从eureka服务器注册表中获取注册信息的时间间隔(s),默认为30秒
eureka.client.registry-fetch-interval-seconds=30
# 获取实例所在的地区。默认为us-east-1
eureka.client.region=us-east-1
#实例是否使用同一zone里的eureka服务器,默认为true,理想状态下,eureka客户端与服务端是在同一zone下
eureka.client.prefer-same-zone-eureka=true
# 获取实例所在的地区下可用性的区域列表,用逗号隔开。(AWS)
eureka.client.availability-zones.china=defaultZone,defaultZone1,defaultZone2
#eureka服务注册表信息里的以逗号隔开的地区名单,如果不这样返回这些地区名单,则客户端启动将会出错。默认为null
eureka.client.fetch-remote-regions-registry=
#服务器是否能够重定向客户端请求到备份服务器。 如果设置为false,服务器将直接处理请求,如果设置为true,它可能发送HTTP重定向到客户端。默认为false
eureka.client.allow-redirects=false
#客户端数据接收
eureka.client.client-data-accept=
#增量信息是否可以提供给客户端看,默认为false
eureka.client.disable-delta=false
#eureka服务器序列化/反序列化的信息中获取“_”符号的的替换字符串。默认为“__“
eureka.client.escape-char-replacement=__
#eureka服务器序列化/反序列化的信息中获取“$”符号的替换字符串。默认为“_-”
eureka.client.dollar-replacement="_-"
#当服务端支持压缩的情况下,是否支持从服务端获取的信息进行压缩。默认为true
eureka.client.g-zip-content=true
#是否记录eureka服务器和客户端之间在注册表的信息方面的差异,默认为false
eureka.client.log-delta-diff=false
# 如果设置为true,客户端的状态更新将会点播更新到远程服务器上,默认为true
eureka.client.on-demand-update-status-change=true
#此客户端只对一个单一的VIP注册表的信息感兴趣。默认为null
eureka.client.registry-refresh-single-vip-address=
#client是否在初始化阶段强行注册到服务中心,默认为false
eureka.client.should-enforce-registration-at-init=false
#client在shutdown的时候是否显示的注销服务从服务中心,默认为true
eureka.client.should-unregister-on-shutdown=true
# 获取eureka服务的代理主机,默认为null
eureka.client.proxy-host=
#获取eureka服务的代理密码,默认为null
eureka.client.proxy-password=
# 获取eureka服务的代理端口, 默认为null
eureka.client.proxy-port=
# 获取eureka服务的代理用户名,默认为null
eureka.client.proxy-user-name=
#属性解释器
eureka.client.property-resolver=
#获取实现了eureka客户端在第一次启动时读取注册表的信息作为回退选项的实现名称
eureka.client.backup-registry-impl=
#这是一个短暂的×××的配置,如果最新的×××是稳定的,则可以去除,默认为null
eureka.client.decoder-name=
#这是一个短暂的编码器的配置,如果最新的编码器是稳定的,则可以去除,默认为null
eureka.client.encoder-name=
#是否使用DNS机制去获取服务列表,然后进行通信。默认为false
eureka.client.use-dns-for-fetching-service-urls=false
#获取要查询的DNS名称来获得eureka服务器,此配置只有在eureka服务器ip地址列表是在DNS中才会用到。默认为null
eureka.client.eureka-server-d-n-s-name=
#获取eureka服务器的端口,此配置只有在eureka服务器ip地址列表是在DNS中才会用到。默认为null
eureka.client.eureka-server-port=
#表示eureka注册中心的路径,如果配置为eureka,则为http://x.x.x.x:x/eureka/,在eureka的配置文件中加入此配置表示eureka作为客户端向注册中心注册,从而构成eureka集群。此配置只有在eureka服务器ip地址列表是在DNS中才会用到,默认为null
eureka.client.eureka-server-u-r-l-context=
目前就先介绍EurekaClientConfigBean,后面的将会在下面的文章中依次介绍。
- 大小: 78.5 KB
分享到:
相关推荐
《Spring Cloud Eureka源码分析》 Spring Cloud Eureka是Netflix公司开源的一个服务发现组件,它是基于REST的服务,用于在分布式系统中定位服务,以实现负载均衡和中间层服务器的故障转移。Eureka的设计目标是提供...
为什么要看源码: 1、提升技术功底:学习源码里的优秀设计思想,比如一些疑难问题的解决思路,还有一些优秀的设计模式,整体提 升自己的技术功底 2、深度掌握技术框架:源码看多了,对于一个新技术或框架的掌握速度会有...
1. Eureka源码:研究Eureka的工作机制,包括服务注册、心跳机制、服务发现等,理解如何维护服务实例的健康状态。 2. Ribbon源码:查看Ribbon如何根据服务发现的信息选择合适的服务器,并实现负载均衡策略。 3. ...
3. `springcloud-consumer-hystrix-dashboard`可能是一个使用Hystrix Dashboard的消费者服务,用于监控服务的运行状态和熔断情况。 4. `springcloud-Eurake-7001`可能是Eureka服务器的实例,负责服务注册与发现,...
你可以在这个项目的基础上,按照上述步骤和源码分析,扩展到多节点的Eureka集群。 总的来说,构建Spring Cloud Eureka集群是一项关键任务,它涉及到服务注册、发现、健康检查和治理等多个方面。通过源码实现,不仅...
《Spring Cloud实战源码》是针对Java开发者的一本深度指南,旨在帮助读者全面理解并熟练掌握Spring Cloud框架的使用和核心原理。Spring Cloud是构建分布式系统的服务发现、配置管理、负载均衡、熔断机制等解决方案的...
### 一、SpringCloud简介与核心组件 #### 1.1 SpringCloud概述 SpringCloud是一套基于Spring Boot实现的微服务云应用开发工具集,它提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线...
Spring Cloud Eureka 是 Netflix 提供的一个服务发现组件,它允许微服务应用注册自身并在启动时发现其他服务。本教程将详细介绍如何搭建一个基本的 Spring Cloud Eureka 服务。 首先,我们需要了解 Eureka 的基本...
SpringCloud的源码分析有助于开发者了解其实现机制,从而更好地定制和优化自己的服务。源码中包含了Eureka服务发现、Zuul边缘服务、Hystrix断路器、 Ribbon客户端负载均衡、Feign声明式客户端、Spring Cloud Config...
9. **源码分析**: 分享的源码是作者手敲并通过编译验证的,意味着你可以深入研究每个服务的实现细节,理解Spring Cloud的原理和最佳实践。通过阅读和运行这些代码,开发者可以提升自己在实际项目中的应用能力。 ...
总结来说,"SpringCloud+SpringBoot+Eureka源码"项目旨在通过源码学习,深入了解如何利用SpringBoot快速构建微服务,并借助SpringCloud的Eureka实现服务间的注册与发现。通过对源码的探索,我们可以更好地掌握微服务...
在压缩包文件中,`SpringCloud-Consumer`可能包含了服务消费者项目的源代码,`EureKaserver`则是Eureka Server的源码,而`SpringCloud-Service`则可能是服务提供者的源码。通过分析这些代码,你可以更深入地理解...
综上所述,"尚硅谷周阳老师SpringCloud学习源码"涵盖了SpringCloud的多个关键组件,通过学习这些源码,开发者能够深入理解微服务架构中的服务治理、API网关、断路器、配置中心、消息驱动等核心概念,进一步提升...
本篇将围绕SpringCloud的核心组件进行源码分析,包括Eureka服务注册与发现、Ribbon客户端负载均衡、Hystrix断路器、Zuul路由网关以及Config分布式配置中心,旨在帮助读者深入理解这些组件的工作原理。 一、Eureka:...
SpringCloud是中国Java开发者广泛使用的微服务框架,它包含了一系列组件,用于构建分布式系统。这个压缩包文件"SpringCloud 15个完整例子"提供了一系列从基础到进阶的示例项目,帮助用户深入理解并实践SpringCloud的...
这些视频课程结合源码分析和课件学习,可以帮助开发者深入理解SpringBoot和SpringCloud的核心原理,并掌握实际应用中的最佳实践。对于想要在微服务领域深入发展的IT专业人士来说,这是一个非常有价值的资源。通过...
这个"springcloud demo项目源码"是用于展示Spring Cloud功能的一个实例,旨在帮助开发者更好地理解和应用Spring Cloud到实际项目中。 **1. Spring Cloud核心组件** - **Eureka**:服务注册与发现,每个微服务启动...
本项目为基于Java的SpringCloud注册中心Eureka设计源码,包含54个文件,其中Java源文件26个,PNG图片文件11个,Git忽略文件6个,XML和YAML配置文件各5个,Markdown文档1个。该源码旨在构建一个适用于SpringCloud...
本篇文章将深入探讨基于SpringCloud构建的电商平台源码,旨在帮助读者理解如何利用Spring Cloud实现一个功能完善的电商系统。 首先,让我们了解Spring Cloud的核心组件。Eureka是服务注册与发现的组件,它允许各个...
Spring Cloud 源码分析可以帮助我们更深入地理解其工作原理,从而更好地利用这个框架来构建我们的微服务架构。 首先,让我们从 `lcg0124-clouddo-view-master.zip` 和 `lcg0124-clouddo-master.zip` 这两个文件开始...