Eureka Client的服务注册、服务发现、服务续约
2021-09-24 17:44:55 12 举报
登录查看完整内容
Eureka Client和Server的整体架构原理
作者其他创作
大纲/内容
http请求
结束当前流程
服务实例主要包含2块数据:(1)主机名、ip地址、端口号、url地址(2)lease(租约)的信息:保持心跳的间隔时间,最近心跳的时间,服务注册的时间,服务启动的时间
注册状态变更监听器
如果某个为true,会去创建ThresholdLevelsMetric用于监控的,一个是心跳,一个是注册
创建网络传输对象(用该组件进行http通信)
同步缓存
ApplicationInfoManager应用信息管理对象
请求分发
读写缓存readWriteCacheMap
全量拉取服务实例数据(服务注册表)
注册当前服务实例到Eureka Server(启动一个线程去执行)
拉取全量注册表http请求
最多剔除15%的故障机器
eureka serverweb.xml里配置的jersry servlet拦截所有的请求,将注册请求分发给ApplicationResources
服务实例注册表
每隔30s进行一次心跳请求
2个都为false
主动过期
清空读写缓存
InstanceResource类renewLease方法
ApplicationResource类的addInstance接收post请求传入InstanceInfo对象,就是一个服务实例
返回注册表
json结构
也就是EurekaTransport是用来支持底层的eureka client跟eureka server进行网络通信的组件
服务注册信息保存到服务注册表
如果为true
heartbeatExecutor线程池(心跳续约任务)
DiscoveryClient类
初始化DiscoveryClient类
服务可能会部署在多台机器上,每台机器上部署的就是一个服务实例
心跳机制(服务续约)http请求(put请求)
初始化本地Applications
服务注册http请求
网络http请求
每隔30s拉取一次服务注册表
定时任务:180秒强制自动过期
返回注册表并缓存在本地
Eureka Client端
调用eureka server的getApplications restful接口
获取注册表
1. 创建调度线程池(用来client发送请求的)2. 创建心跳线程池(用来心跳检查的)3. 创建缓存刷新线程池(用来刷新注册表的)
Eureka client第一次启动的时候,必须从eureka server端一次性抓取全量的注册表的信息过来,在本地进行缓存后面的话呢,每隔30秒从eureka server抓取增量的注册表信息,跟本地缓存进行合并
scheduler线程池
新的服务注册、下线、故障,自动过期这个缓存
发送http请求,调用eureka server的restful请求
定时任务:每30s把读写缓存的数据和只读缓存数据做对比,如果不一致,将读写缓存同步到只读缓存
初始化任务调度
服务续约机制的核心就是,根据服务名和实例id,获取到服务实例,更新lastUpdateTimestamp时间戳
Eureka Server端
读取的是eureka的readOnlyCacheMap(只读缓存)
定时任务每隔60秒检查心跳机制,如果有180秒的时间没有报告心跳就会踢出服务实例
增量抓取注册表也就是服务发现的过程
依赖
cacheRefreshExecutor线程池(抓取注册表任务)
判断shouldRegisterWithEureka和shouldFetchRegistry
this.applications = new ConcurrentLinkedQueue<Application>();即队列
{ “服务”: { “服务实例1”:Lease<InstanceInfo> }}
入口:Eureka client的启动,即初始化DiscoveryClient类
EurekaClientConfig客户端配置对象
shouldRegisterWithEureka:是否开启了需要拉取注册表shouldFetchRegistry:是否开启需要向其他Eureka注册自己
0 条评论
回复 删除
下一页