spring cloud alibaba nacos 源码流程图
2020-06-28 10:13:42 6 举报
nacos 1.3.0源码流程图
作者其他创作
大纲/内容
/cluster/state
实例化.ServiceManager
调用
随机选用一个内存中的server
com.alibaba.nacos.client.naming.NacosNamingService
轮训调用接口
getServerListFromEndpoint
com.alibaba.nacos.naming.consistency.ephemeral.distro.DistroConsistencyServiceImpl.put
CP
服务间健康检查
加载配置文件线程池
通过命名空间获取服务
org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration
NacosAutoServiceRegistration.NacosAutoServiceRegistration
taskDispatcher.addTask(key);
bind(WebServerInitializedEvent event)
父类
调用保存方法
addInstance
接口
com.alibaba.nacos.naming.consistency.DelegateConsistencyServiceImpl.put
执行
调用callServer
serversFromEndpoint
getService
启动线程从队列中取数据
空服务创建完成
updateIpAddresses
service.processClientBeat(clientBeat);
ApplicationListener<WebServerInitializedEvent>
com.alibaba.nacos.naming.cluster.ServerListManager..ServerStatusReporter
监听启动事件
com.alibaba.nacos.client.naming.net.registerService
像队列中加入数据
run
getPushService().serviceChanged(service);
保存信息
GlobalExecutor.submitServiceUpdate(new ServiceUpdater(serviceKey));
nacos/serverlist
保存实例到task
start
调用接口获取服务列表,直接保存在内存里面
updatedHealthStatus
ServerInfoUpdater.run
nacos 1.3.0 源码流程图
NacosNamingService构造方法
设置状态
com.alibaba.nacos.naming.controllers..ServiceController.serviceStatus
保存服务信息
putServiceAndInit
TaskScheduler.run
随机选择server
调用接口
updateIPs(CopyOnWrite思想)
com.alibaba.nacos.naming.consistency.ephemeral.distro.TaskDispatcher.addTask
com.alibaba.nacos.naming.core.ServiceManager.registerInstance
注册
如果是单核的,就是一个线程,多核的就CPU核心数一半的线程。
raftPeerSet.local
com.alibaba.nacos.naming.healthcheck.HealthCheckReactor.scheduleCheck
服务端
init
HealthCheckReactor.scheduleNow(clientBeatProcessor);
AP
读取数据
创建
com.alibaba.nacos.naming.core.com.alibaba.nacos.naming.core.init
Notifier.run
返回持久化或非持久化实例
客户端跟服务端心跳流程
service.init()
默认15秒无回应,服务设置为不可用
memberManager.update(target);
JacksonUtils.transferToJsonNode(serviceManager.getMySelfClusterState());
心跳线程调用
实例达到1000个或者上次同步时间超过2秒同步一次
addIpAddresses
获取服务
handle
synchronizer.send
5秒执行一次检查
initRefreshSrvIfNeed
服务端方法
org.springframework.cloud.alibaba.nacos.registry.register(Registration registration)
创建空服务实例
beat
onPut
放入队列
/nacos/ns/distro/datum
listener.onChange
putService
GlobalExecutor.registerServerInfoUpdater(new ServerInfoUpdater());
使用了双层map作为结构
ClientBeatCheckTask.run
processClientBeat
执行bind方法
/instance/beat
注册流程
死循环获取数据
同步实例信息到其他服务
getServers()
registerService
dataSyncer.submit
/instance
死循环从task中读取数据
获取服务列表
定时任务30秒执行一次
在TaskDispatcher初始化时已经构建了线程池并启动了
serverProxy.sendBeat(beatInfo)
nacosAutoServiceRegistration
放到内存中
NamingProxy.reqCommon
执行run方法
调用其他实例接口
循环调用接口
reqAPI
createServiceIfAbsent
最终接口
instance
客户端
随机选一个server调用
接口返回
com.alibaba.nacos.naming.misc.ServerStatusSynchronizer.send
注册服务列表更新监听线程
com.alibaba.nacos.naming.core.Cluster.updateIPs
放入线程池
refreshSrvIfNeed
30秒没响应服务被下线
GlobalExecutor.submit(loadDataTask);
HealthCheckReactor.scheduleCheck(clientBeatCheckTask);
不弄了
DistroController.onSyncDatum
getMySelfClusterState
BeatProcessor线程
默认5秒调用一次,如果在server端配置了,则走配置时间
init()
registerInstance
/operator/server/status
com.alibaba.nacos.naming.core.ServiceManager.addUpdatedService2Queue
registerInstance()
GlobalExecutor.submitDistroNotifyTask(notifier);
删除有问题节点服务
获取服务实例
调用服务端注册接口
启动线程
提交
BeatTask线程
ClientBeatProcessor.run
注册服务状态报告监听线程
0 条评论
下一页
为你推荐
查看更多