naocs源码核心部分
2020-02-28 10:48:04 0 举报
nacos核心部分源码流程图
作者其他创作
大纲/内容
createServiceIfAbsent
/raft/datum
namnaming.InstanceController
beatReactor.addBeatInfo
@PostConstruct init() 初始化线程池
serviceRegistry.register(getRegistration())
实现
执行定时任务
使用了copyonwrite,将原始数据复制出来一份,对数据进行整合替换原始数据
从nacosDiscoveryProperties获取相关配置组装成instance
调用leader接口
instance/delste
ScheduledExecutorService executor
/nacos/v1/ns/instance
使用countdownlatch,countdlatch的数量为服务器的一半
NacosRegistration
putServiceAndInit
raftStore.write(datum);
bind(event)
if (instance.isEphemeral())
DistroController.onSyncDatum
NacosDiscoveryAutoConfiguration
/raft/datum/commit,接口调用成功countdownlatch -1
如果当前时间-实例上次的心跳请求时间15S
mapConsistencyService(key)
是否leader节点
可以将数据放入阻塞队列,然后启用线程池去阻塞队列中取数据
register()
insatanceController.beat
持久化实例
GlobalExecutor.submitDataSync
ApplicationListener在容器启动时会监听相应的事件,执行onApplicationEvent方法
bind方法中使用compareAndSet设置端口号解决并发问题
同步将数据写到磁盘
getRegistration返回的就是NacosRegration的实例
spring.factories文件
将实例注册到内存的map中去
NacosAutoServiceRegistration
异步将数据写入内存
queue.offer(key);
临时实例
putService
sendBeat
instance.setHealthy(false)
service.init()
是
如果根据namespace、service获取的instance为空先注册
executor.submit(notifier);
@PostConstruct init() 初始化线程池
Application初始化的时候会执行该方法
createEmptyService
继承
将实例更新到内存注册表
HealthCheckReactor.scheduleNow(clientBeatProcessor)
源码入口
@Bean
ApplicationListener
TaskDispatcher
向阻塞队列放入实例
serviceManager.registerInstance
/instance/beat
否
getPushService().serviceChanged(service)
keys.add(key);
dataSize == partitionConfig.getBatchSyncKeyCount() || (System.currentTimeMillis() - lastDispatchTime) > partitionConfig.getTaskDispatchPeriod()
@Bean标签是在spring容器初始化的时候对对象进行实例化
serviceResgister就是NacosServiceRegistry实例
DistroConsistencyServiceImpl
deleteIP(Instance instance)
tasks.take()
设置instance.setLastBeat(System.currentTimeMillis())instance.setHealthy(true)
向集群进行同步
serverProxy.registerService
/distro/datum
如果当前时间-实例上次的心跳请求时间30S
AbstractAutoServiceRegistration
ephemeralInstances = toUpdateInstances
ClientBeatCheckTask
listener.onChange,调用的是service的实现类
BeatTask(默认5s一次定时任务)
service.processClientBeat(clientBeat)
taskDispatcher.addTask(key)
onApplicationEvent
删除当前实例
HTTP POST
HealthCheckReactor.scheduleCheck
NacosServiceRegistry
persistentConsistencyService.put
0 条评论
下一页