springcloud中eureka源码分析

1.SmartLifecycle

1.写一个类实现SmartLifecycle

2.spring中的处理逻辑

上图得到spring中所有实现了Lifecycle的类bean

 

上图得到所有的SmartLifecycle的子类循环掉其中的start方法

2.client源码解析

1.入口

1.Marker条件注解

EurekaClientAutoConfiguration会在EurekaDiscoveryClientConfiguration加载完之后再加载

 

2.客户端注册线程解析

1.提交listener注册请求

 

 

创建EurekaClient的bean中的initScheduledTasks方法会提交一个Listener。这个监听器的notice方法会掉服务注册的逻辑

2.监听器中的服务注册逻辑

 

 

 

上面用到了装饰器模式,期间传递实例参数。

其中每个类链都继承了EurekaHttpClientDecorator类,每个类链开始掉父类的regsiter方法,封装一个匿名类来进行下一个链,把这个匿名类传入本类掉execute方法。

execute方法开始处理自己的逻辑,然后构造一个EurekaHttpClientDecorator子类通过匿名类继续掉父类EurekaHttpClientDecorator的register方法。

 

 

最终掉post方法把instance当参数传过去访问如下的地址

 

。3.启动监听器的逻辑

EurekaAutoServiceRegistration

 

 

 

 

 

上面通知了所有的监器状态改变了,最终会掉之前提交的注册器开启服务注册

3.客户端心跳检测来服务续约和服务端续约代码

1.客户端心跳检测

 

CloudEurekaClient父类DiscoveryClient的初始化方法会调用initScheduledTasks方法开启心跳检测

 

 

 

2.服务端服务续约

 

InstanceResource。上面registry.renew方法检测服务状态,如果检测ok。会把当前服务在注册中心的lastDirtyTime置为当前时间加duringtime

上面会让注册中心的lastDirtyTime和客户端传入的lastDirtyTime进行比较。如果注册中心的较早就抛出NOT_FOUNT错误。

 

 

4.客户端服务信息抓取

在开启心跳检测的代码上面是服务信息抓取的定时任务

 

 

 

 

 

全量更新访问服务端得到信息

 

 

增量如果本地没有对应服务就添加

 

 

 

3.server端启动源码解析

1.入口

 

 

 

 

 

上图引入EurekaServerInitializerConfiguration类

2.同步其他节点服务信息和服务剔除

在上述入口EurekaServerInitializerConfiguration中,初始化信息

 

syncUp同步其他服务节点信息,openForTraffic执行服务剔除定时任务

1.从其他节点拷贝信息

2.服务剔除定时任务

 

上面定时任务的Task是EvictionTask.周期为60秒

 

 

上面会得到所有已经注册过的lease.判断每个lease是否过期。并把过期lease放入expiredLeases集合中

上面对每个过期的lease执行剔除操作

 

3.客户端来的请求接收入口

FilterRegistrationBean

一旦客户端请求来了,会掉ServelContainer过滤eureka请求并交给对应的映射方法进行处理

 

4.客户端注册请求过来找到服务端对应方法

客户端注册提交请求后,服务端过滤器拦截请求

 

 

 

上面遍历所有的rules来找到一个合适的rule.

找到的这个HttpMethodRule有个map,每个value对应ApplicationResource的一个方法。

 

5.服务端变量源码分析

1.eureka.client.register-with-eureka

这个变量要配置为false.表示这个注册中心不需要注册。

如果这个变量为true,并且eureka.client.should-enforce-registration-at-init=true时表示会进行注册,注册失败会抛异常

2.eureka.client.fetch-registry

单节点为false.多节点要配置为true,并配置eureka.client.serviceUrl.defaultZone参数

 

 

上图代码会全量或者增量拉取配置中心的代码

5.服务注册核心接口InstanceRegistry解析

1.总览

InstanceRegistry接口继承了LeaseManager和LookupService接口

2.LeaseManager接口

这个接口专门负责服务注册,续约和剔除的操作

3.LookupService接口

LookupService接口主要是找寻已注册服务信息的

6.服务注册客户端处理方法解析

客户端注册发送请求进入对应的映射方法,最后会调用InstanceRegistry的register方法注册

 

在register方法中把InstanceInfo生成lease

在InstanceRegisty的map变量registy中添加lease

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值