nacos注册和配置中心源码流程图
2021-07-07 16:30:34 0 举报
登录查看完整内容
nacos注册中心源码
作者其他创作
大纲/内容
向服务端注册实例NacosServiceRegistry.register()
getDistroMapper().responsible
更新信息memberManager.update
/nacos/v1/ns/instance
beatReactor.addBeatInfo
getPushService().serviceChanged
服务发现入口
nacos注册中心开始
ServerStatusSynchronizer.send
1.如果15秒内未接受到客户端心跳,将客户端health状态设置成false,调用监听器,udp通知2.如果30秒内未接受到客户端心跳,则剔除
选中一台机器执行
ClientBeatProcessor.run()
服务发现入口NacosNamingService.selectInstances()
检测cluster节点下的所有实例IP健康状态,发送http请求判断存活
客户端心跳检测任务clientBeatCheckTask
每个1s定时udpPush
服务端集群状态管理器@Component
operator/server/status
心跳任务BeatTask
NacosServerList.getServers()
发布变更事件通知订阅的客户端getPushService().serviceChanged(this);
DistroProtocol
cluster.init()
NO
监听器service.onChange
OperatorController.serverStatus
继承
service.updateIPs
notifier.addTask
AbstractAutoServiceRegistration
NacosNamingService.registerInstance()
operator/cluster/state
心跳新线程,修改instance的最后心跳时间
实例注册InstanceController.update()
consistencyService.put
服务端注册了新服务,以UDP的方式通知其他客户端,UDP性能高,准确性低
AbstractAutoServiceRegistration.bind()
start()
防止读写冲突:copyonwrite思想,以cluster为界限,复制一份list实例,修改操作只修改副本,最后将副本替换成原本
Notifier.run
DynamicServerListLoadBalancer.updateListOfServers
instance是否为空?
集群数据验证任务DistroVerifyTask
NacosAutoServiceRegistration
discoveryProperties.namingServiceInstance() .selectInstances
serviceManager.registerInstance()
客户端调用服务端接口,springcloud底层使用的是ribbonDynamicServerListLoadBalancer.updateListOfServers
putServiceAndInit
客户端入口-服务注册
v1/ns/instance/beat
http请求服务端注册reqAPI,这里调用update方法,其实也是注册,服务端会判断
YES
客户端向服务端发起心跳入口
cluster所有IP健康检查任务HealthCheckTask
分割线
Notifier初始化
服务端集群启动@Component
cluster所有IP健康检查任务DistroDelayTask
集群节点信息同步任务ServerInfoUpdater
onPut()
初始化一个空的服务createEmptyService
监听器listener.onChange
异步阻塞队列实现高性能:DistroConsistencyServiceImpl持有一个成员变量Notifier,Notifier是一个线程,在Notifier初始化完毕后,会调用DistroConsistencyServiceImp.init方法提交Notifier的任务,执行run方法,里面有一个阻塞队列blockQueue.take,也就是说,只有当这个queue有新事件的变动,这个队列才会往下走
client
distroProtocol.sync
服务端接收客户端心跳InstanceController.beat()
同步实例到集群其他节点(TODO)distroProtocol.sync
NamingProxy.registerService
serverProxy.sendBeat
集群数据启动加载任务DistroLoadDataTask
DistroConsistencyServiceImpl.put
cluster.updateIPs
NacosDiscoveryAutoConfiguration
nacos-discovery包中spring.factories中查看
阻塞BlockingQueue.take()
pushService.onApplicationEvent
serviceManager.addInstance()
OperatorController.getClusterStates
register
service.processClientBeat
@Bean
HttpHealthCheckProcessor.process
init()
构造方法init()GlobalExecutor.submitDistroNotifyTask(notifier)
server
服务端入口-服务注册
bind方法上有@EventListener(WebServerInitializedEvent.class)所以实现了spring的监听器接口,会在spring refresh方法之后执行
ServerListManager
集群节点状态同步任务ServerStatusReporter
0 条评论
回复 删除
下一页