Nacos流程图
2022-06-21 15:59:22 0 举报
Nacos客户端和服务端请求流程图
作者其他创作
大纲/内容
putServiceAndInit()
用当前的时间-上一次心跳的时间,看是否大于超时时间,这里是15S
addInstance()
true
bind()
this.serviceRegistry.register(getRegistration())
// 获取service下所有的临时实例List<Instance> instances = service.allIPs(true)
serverProxy.registerService()
循环检查每个实例
服务注册
register()
createServiceIfAbsent()
instanceController
deleteIp(instance)
凭借经验所得,我们选取自动配置类
DistroConsistencyServiceImplput()
定时任务
beatInfo会被放到线程池里,并且在系统启动时立马执行一次,之后每隔5S执行一次
// 1、获取serviceIdString serviceId = registration.getServiceId()
源码入口
hostReactor.getServiceInfo()
AbstractAutoServiceRegistration
/instance
在更新instance时运用了copyOnWrite的思想,赋值一个实例列表的副本,然后操作副本,最后再讲副本更新到注册表中
extends
构建一个空的service放入注册表里
@Bean
Service.onChange()
最后通过异步调用删除下线实例
instance.isEphemeral()
start()
this.serviceRegitry是NacosServiceRegistry这个实例
run()
根据springboot的项目,我们找到工程里external libraries下的spring-cloud-alibaba-nacos-discovery,在这个包的META-INF下有个spring.factories文件,这里面就有我们要引入的类。
createEmptyService()
// 服务变更事件getPushService().serviceChanged(service)
NacosNamingService.registerInstance()
发布服务变更事件
service.init()
NacosDiscoveryAutoConfiguration
NacosNamingService.getAllInstances()
Nacos服务端
ClientBeatCheckTask
NacosAutoServiceRegistration
implemennts
服务发现
HttpClient.asyncHttpDelete()
putService(service)
HealthCheckReactor.scheduleCheck(clientBeatCheckTask)
handle(pair)
reqAPI()
ephemeralInstances = toUpdateInstances
NacosRegistration
继续检查每个实例心跳是否超过30S
BeatTask
System.currentTimeMillis() - instance.getLastBeat() > instance.getIpDeleteTimeout()
serviceManager.removeInstance()
实际是NacosAutoServiceRegistration对象调用。而NacosAutoServiceRegistration在初始化的时候,有设置NacosServiceRegistry和NacosRegistration的实例进来
最终是在这个方法更新instance
serviceManager.registerInstance()
/instance/list
onApplicationEvent()
延时更新客户端缓存的定时任务
System.currentTimeMillis() - instance.getLastBeat() > instance.getInstanceHeartBeatTimeOut()
NacosServiceRegistry
serverProxy.sendBeat(beatInfo)
instance.setHealthy(false)
delete()
// 2、获取instanceInstance instance = getNacosInstanceFromRegistration(registration)
发布心跳超时事件
/instance/beat
getRegistration()获得的是这个实例
new UpdateTask()
实现了ApplicationListener接口的都需要实现onApplicationEvent方法
Nacos客户端
ApplicationListener
0 条评论
下一页
为你推荐
查看更多