Spring Cloud Eureka Server源码分析

总览

昨天文章分析介绍可Eureka Client的流程,今天接着昨天的将分析Eureka  Server的一个流程。EurekaServer 是服务的注册中心,负责Eureka Client的相关信息注册,主要职责:

  • 服务注册
  • 接受心跳服务
  • 服务剔除
  • 服务下线
  • 集群同步

@EnableEurekaServer

通过向Spring容器注入EurekaServerMarkerConfiguration#Maker的形式激活EurekaServerAutoConfiguration 配置类

 

自动装配的主入口

EurekaServerAutoConfiguration 是通过配置文件自动进行装配的,只要上面开启EnableEurekaServer这个注解

image.png

image.png

image.png

EurekaServerAutoConfiguration向Spring注入了InstanceRegistry,后面的服务注册是InstanceRegistry的方法

image.png

 

注册 Jersey filter: 所有/eureka的请求都需要经过Jersery Filter,其处理类是com.sun.jersey.spi.container.servlet.ServletContainer,其既是Filter,也是Servlet,包含Jersey的处理逻辑。在构造时已经将com.netflix.discovery包 和 com.netflix.eureka包 下的类作为处理请求的资源导入,如处理单个应用请求的com.netflix.eureka.resources.ApplicationResource

image.png

 

ApplicationResource

 

ApplicationResource通过addInstance注册单个应用实例,最终调用的是PeerAwareInstanceRegistry的一个实现类InstanceRegistry的register方法进行注册的

image.png

image.png

代码结构

为什么是InstanceRegistry的register方法呢,我们通过下面的图看下继承结构

image.png

 

首先看下最上层的接口LeaseManager有哪些方法以及作用,看源码可以先看看doc文档说些啥,看不懂没关系,猜就对了。

 

  • This class is responsible for creating/renewing and evicting a lease for a particular instance.
  • Leases determine what instances receive traffic. When there is no renewal request from the client, the lease gets expired and the instances are evicted out of AbstractInstanceRegistry. This is key to instances receiving traffic or not.

image.png

AbstractInstanceRegistry

  • Handles all registry requests from eureka clients.
  • Primary operations that are performed are the Registers, Renewals, Cancels, Expirations, and Status Changes. The registry also stores only the delta operations

 

 

服务注册

上面提到服务是InstanceRegistry的register方法进行注册的,但是InstanceRegistry最终调用的是父类的方法, 服务注册最终是通过AbstractInstanceRegistry类的register进行注册的,服务注册其实就是放到一个ConcurrentHashMap里面去,如下:

image.png

image.png

然后是租约信息,根据instanceId获取实例的租约,如果该实例的租约已经存在,比较最后的更新时间戳大小,取最大值的注册信息信息

image.png

如果租约不存在,注册一个新的实例,保存租约到map中

image.png

 更多文章请关注我的公众号

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值