Nacos2.0注册中心源码流程图
2022-04-16 16:38:07 80 举报
Nacos2.0.0 版本 注册中心源码流程图 springcloudalibaba 2.2.7RELEASE
作者其他创作
大纲/内容
startBeans(true)
http
ConnectionManager#start开启定时任务1s一次
自动装配
是
取消订阅
服务注册
serviceStorage.getData
获取服务
grpcClientProxy.subscribegrpc请求服务端获取服务信息
事件推送
子容器完成刷新
bind(event)
unregister
故障转移
发送服务变更事件InstancesChangeEvent
否
clientProxy.queryInstancesOfService
removePublisherIndexes
doStart
AbstractAutoServiceRegistration#onApplicationEvent
ServiceChangedEvent服务变更事件
Service@13080
@Bean
服务健康检查
getPushData(service)
NamingMetadataManager#onEvent
EphemeralClientOperationServiceImpl#registerInstance
NacosServiceRegistry
是否订阅
ServiceChangedEvent
clientProxy.registerService
订阅相关
客户端断开连接传 DELETE、客户端新增/修改传CHANGE
InstanceController#register
InstanceMetadataEvent
failoverReactor.getService
当前服务进行订阅
addSubscriberIndexes
serviceInfoHolder.getServiceInfo本地缓存获取
ServiceSubscribedEvent服务被订阅事件
继承
ServiceQueryRequestHandler#handle
操作注册表
handlerClientSyncData
buildNamingService(properties)构建NameService对象
removeSubscriberIndexes
FailoverReactor#serviceMap
onReceive
AbstractAutoServiceRegistration
故障转移缓存中获取
DistroClientDataProcessor#onEvent集群数据同步
InstanceRequestHandler#handle
PushDelayTask
源码版本NacosServer: 2.0.0spring-cloud-starter-alibaba-nacos-discovery:2.2.7.RELEASE
本地缓存对象是否为空
获取NameService之前已经创建
serviceInfo写入本地磁盘
存在
服务订阅
从注册表中获取
upgradeClient更新客户端数据
.......
ApplicationListener
注销
Service@15705
NamingMetadataManager#expiredMetadataInfos移除元数据信息
发送事件
register()
DistroDataRequestHandler#handle
故障转移开关定时器
数据获取
SubscribeServiceRequestHandler#handle
通过健康阈值对结果进行健康检查后返回健康检查配置在服务metadata中
事件发布
订阅
集群缓存serviceClusterIndex添加服务信息
推送给当前服务所有的服务订阅者
ClientRegisterServiceEvent
启动心跳事件HeartbeatEvent暂不支持该功能
返回服务信息
addPublisherIndexes
192.168.180.12:8080#true
handleInstanceMetadataEvent
本地缓存serviceInfoHolder是否存在服务信息
是否负责节点
Client
监听WebServerInitializedEvent事件,Spring容器刷新完成后会发出的一个事件(ServletWebServerApplicationContext#finishRefresh)
ServiceSubscribedEvent
集群数据同步
故障转移备份定时器
grpcClientProxy
NamingSubscriberServiceV2Impl#onEvent
NacosRegistration
注册
获取自定义生命周期Bean
服务端主动对这些客户端进行异步探测,异常或1s无响应的直接移除
开启故障转移后将故障转移文件配置写入下面缓存中
getAllInstancesFromIndex注册表中获取
192.168.180.15:8080#true
distroComponentHolder.findDataProcessor
updateExpiredInfo
clientManager.getClient(clientId)
到handler之前会跟服务端建立长链接放在ConnectionManager中
ServiceStorage#serviceDataIndexes服务缓存类中是否存在
同步客户端连接
getPublishInfo(instance)客户端Instance转换为服务端Instance
直接结束
发送服务订阅事件ClientSubscribeServiceEvent
namingService.subscribe
ClientServiceIndexesManager#onEvent
getNacosInstanceFromRegistration构建注册实例Instance对象
是否触发故障转移
this.start()
selectInstancesWithHealthyProtection
NacosWatch
syncToAllServer((ClientEvent) event)
所属方法
移除客户端连接发送客户端断开事件
发送服务取消订阅事件ClientUnsubscribeServiceEvent
192.168.180.13:8080#true
服务信息是否变更
publisherIndexes(服务注册表)
handleSyncData
instanceMetadataMap是否包含此Service&metadataId
nacosServiceManager.getNamingService
ConnectionBasedClientManager#clientDisconnected
ClientDisconnectEvent
订阅处理
dataProcessor.processData
handleClientOperation处理客户端操作事件
新增/修改
AbstractApplicationContext#finishRefresh
只推送给当前订阅的订阅者
NacosAutoServiceRegistration
spring.factoryNacosServiceRegistryAutoConfiguration
syncToTarget
clients.remove移除客户端连接
NacosNamingService#getAllInstances
是否过期
getSingleton(service)
注册相关
subscriberIndexes(订阅注册表)
getLifecycleProcessor().onRefresh()
拉取结果
metadataManager.getServiceMetadata获取元数据
同步给集群其它节点
添加服务同步注册中心的定时器(UpdateTask)默认6s一次最大一分钟1次
192.168.180.17:8080#true
缓存serviceDataIndexes添加服务信息
发送服务注册事件ClientRegisterServiceEvent
返回serviceInfo
distroProtocol.sync类型在参数中体现
clientManager.clientDisconnected
删除
Server
httpClientProxy
缓存操作
phases.get(key).start()
移除那些修改之前的服务
grpc请求
namingService.registerInstance
grpc
定时将配置写入故障转移文件
NamingMetadataManager#expiredMetadataInfos添加元数据信息
serviceInfoHolder.processServiceInfo(result)
统计20s内没有跟服务端进行交互的客户端
收藏
收藏
0 条评论
下一页