nacos注册源码
2020-09-17 13:49:24 0 举报
登录查看完整内容
nacos源码
作者其他创作
大纲/内容
getServiceInfo0
createEmptyService
循环从阻塞队列中拿数据处理
如果是持久实例
getPushService().serviceChanged
notifier.run
UpdateTask
service.processClientBeat
@PostConstructDistroConsistencyServiceImpl初始化线程池
bind(WebServerInitializedEvent)
延时执行的定时任务更新客户端的服务缓存
从缓存获取实例
consistencyService.put
源码入口
http rest调用
同步实例到集群其他机器
ephemeralInstances = toUpdateInstances;
DistroConsistencyServiceImpl.put
@Bean
如果为空,调用server接口获取数据的
taskDispatcher.addTask
InstanceController.list
raftCore.signalPublish
register
tasks.take
persistentConsistencyService.put
namingService.getAllInstances
定时获取服务端最新数据,更新到本地缓存
NacosAutoServiceRegistration
this.serviceRegistry就是当前实例
serviceManager.getService
this.serviceRegistry.register(this.getRegistration())
namingService.registerInstance
利用countdownlatch,确保集群半数以上写入
服务发现
addInstance
HttpClient.asyncHttpPostLarge
AbstractAutoServiceRegistration
NacosServiceRegistry
线程
this.getRegistration()就是当前实例
继承
WebServerInitializedEvent
serverProxy.registerService
hostReactor.getServiceInfo
注解监听tomcat启动
doSrvIpxt
listener.onChange,listerner是service实例
dataStore.put
通过udp推送给客户端
scheduleUpdateIfAbsent
调用服务端的服务发现接口
/instance/beat
notifier.addTask
nacos-client
判断是否是临时实例,如果是才执行心跳任务
线程池立即开启线程任务更新最后心跳时间
默认临时实例
nacos-server
raftProxy.proxyPostLarge(将这个请求转发集群leader写入)
updateServiceNow
GlobalExecutor.submitDistroNotifyTask(notifier)
BeatTask
serverProxy.sendBeat
raftStore.write
InstanceController.register
serviceManager.registerInstance
tasks.offer
是
onPublish
copyonwrite
serviceManager.registerInstance
InstanceController.beat
spring-cloud-starter-alibaba-nacos-discovery.jar里面的spring.factories的NacosDiscoveryAutoConfiguration
NacosRegistration
notifier.addTask
新的注册实例更新到注册表
异步任务更新到内存注册表
service.srvIPs
beatReactor.addBeatInfo
当前节点是否leader
run
/instance
start
NacosDiscoveryAutoConfiguration
/instance/list
如果实例不存在,重新注册(如服务端重启实例丢失)
写文件保持到本地
updateIPs
服务注册
instance.setLastBeat(System.currentTimeMillis())
否
收藏
收藏
0 条评论
回复 删除
下一页