Nacos源码
2023-05-04 15:01:19 0 举报
Nacos AP架构源码 CP架构待补充
作者其他创作
大纲/内容
service.onChange
DistroDelayTaskProcessor.process
服务注册入口
service.srvIPs()
instance.setHealthy(false);
②重新放进线程池
run
HealthCheckReactor.scheduleNow(clientBeatProcessor);
健康检查定时任务
futureMap.get()==null
distroMapper().responsible
NacosNamingService.getAllInstances()
推送更改通知
distroProtocol.sync
run()
NacosServiceRegistry
缓存到客户端
spring.factories
更新心跳时间
将从Map获得的任务存放到延迟队列当中
同步的发起机器就是做检查任务的那台机器
服务注册
getPushService().serviceChanged(this);
for死循环
如果实例不存在重新注册
distroTaskEngineHolder.getExecuteWorkersManager().addTask
instance
初始化Service
更新注册列表
task.run
new DistroDelayTaskExecuteEngine
service.init
调用删除接口(HttpMethod.DELETE)
BlockingQueue<Runnable> queue
serviceRegistry.register(getRegistration());
重新放进线程池
doSrvIpxt()
NacosServiceRegistry就是serviceRegistry的实现类
servicerManager.removeInstance
ServerListManager
serverProxy.sendBeat()
getDistroMapper().responsible
serviceManager.registerInstance
超过30s没有收到心跳删除实例信息
register()
DistroSyncChangeTask.run
addInstance
注册
2.同步其他集群节点
注册监听器
worker.process(task);
new DistroExecuteTaskExecuteEngine
allInstances.addAll(persistentInstances); allInstances.addAll(ephemeralInstances);
processingExecutor.scheduleWithFixedDelay(font color=\"#94e0e1\
GlobalExecutor.registerServerInfoUpdater(new ServerInfoUpdater());
namespace
synchronizer.send
ephemeralConsistencyService.put
初始化内存注册表当中
推送udp消息给客户端
beatReactor.addBeatInfo
服务发现入口
distroHash(serviceName) % servers.size()
executor.schedule()
@Bean
font color=\"#94e0e1\
定时更新注册表
scheduleUpdateIfAbsent()
/instance/beat
提供给外围访问的接口(font color=\"#323232\
InstanceController.list()
addTask(new UpdateTask())
udpPush
GlobalExecutor.registerServerStatusReporter(font color=\"#94e0e1\
向客户端发送心跳请求
group
ServiceRegistryEndpoint endpoint = new ServiceRegistryEndpoint(serviceRegistry); endpoint.setRegistration(this.registration);
通过内存注册表获得值
AbstractAutoServiceRegistration
添加任务到阻塞队列
distroTaskEngineHolder.getDelayTaskExecuteEngine().addTask
①执行更新注册列表逻辑
DistroTaskEngineHolder
ephemeralInstances = toUpdateInstances
putServiceAndInit
/instance
serviceManager.getService()
向服务端发送注册请求
getAllTaskKeys
ServiceRegistryEndpoint
extends
从Map中获得任务列表
createEmptyService
内存注册表
新创建的Instance放到Service列表中
全量更新内存注册表
clusterMap.get(entry.getKey()).updateIps
putService
更新内存注册表
new InnerWorker(name).start()
ApplicationListener
persistentConsistencyService.put
getRegistration()获得的是NacosRegistration实例
InstanceController.register
updateService()
添加任务到Map中
onApplicationEvent
从延迟队列获得任务
registration获得的是NacosRegistration实例
PushService.onApplicationEvent
HealthCheckReactor.scheduleCheck(clientBeatCheckTask)
删除实例
hostReactor.getServiceInfo
临时节点
queue.take()
cluster
InstanceController.deregister
onPut
更新
添加实例到内存注册表
若为临时节点添加一个心跳延迟任务
添加到线程池
NacosServiceRegistryAutoConfiguration
init()
consistencyDelegate.put
从阻塞队列中拿取任务消费
service
new TaskExecuteWorker
service.processClientBeat()
executorService.schedule(font color=\"#94e0e1\
namingService.registerInstance
tasks.take
ServiceRegistryAutoConfiguration
执行任务
serverProxy.registerService
deleteIp(instance);
持久节点
1.更新本地注册表缓存
InstanceController.beat()
向客户端发送查询注册列表请求
NacosRegistration
NacosAutoServiceRegistration
/instance/list
超过15s没有收到心跳健康状态置为false
implements
0 条评论
回复 删除
下一页