Nacos2.x 服务注册与发现的工作原理
2022-10-19 15:24:14 2 举报
登录查看完整内容
Nacos2.x 服务注册与发现的工作原理
作者其他创作
大纲/内容
Service
建立Service和发布Client的索引关系
hash取模分配
查找订阅关系
AbstractDelayTask
singletonRepository
publishers,维护服务对应的实例信息
从serviceDataIndexes中获取服务实例数据返回即可
Tasks
.......
根据客户端查找连接
ClientServiceIndexesManager.handleClientOperation
推送给目标客户端
serviceStorage.getData
PushExecuteTask.run
Subscriber
TaskExecuteWorker执行任务
服务管理,统一管理服务实例信息
执行逻辑
获取Service对应注册的客户端id
subscribers,服务对应的订阅者信息
客户端发布和订阅的索引关系管理
NacosNamingService
代码入口: GrpcBiStreamRequestAcceptor.onNext() -> ConnectionBasedClientManager.clientConnectioned() [connectionManager.register]
ServiceStorage.getPushDate()
从publisherIndexes中获取
发起事件订阅
publisherIndexes
发布,ClientRegisterServiceEvent事件
根据clientId查找Clients
2. 发布ClientSubscribeServiceEvent
serviceClusterIndex
NacosDelayTaskExecuteEngine
String(clientId)
待执行的任务AbstractExecuteTask
把任务丢给任务执行引擎
集群索引管理 key:value=>Service:Set(ClusterName)
保存到ServiceStorage中
subscriberIndexes
获取需要推送的数据
ClientSubscribeServiceEvent
NacosExecuteTaskExecuteEngine
1. 保存服务实例
client.addServiceInstance
单个客户端来说,同一个服务只能注册一个实例
获取待执行的任务
Set<String>
namespaceSingletonMaps
添加任务到延迟推送任务执行引擎
Service的组成:namespace/group/servicename
ClientRegisterServiceEvent
从serviceStorage中查找服务数据
registerInstance
100毫秒执行一次
SubscribeServiceRequestHandler
把当前订阅的目标服务,包装成一个任务
注册服务节点
connectionId
生成要推送的数据
服务实例信息存储索引,后续的服务信息查询是从这里面去检索
延迟推送任务执行引擎,专门用来实现服务地址变更的推送任务
1. 建立Service和Client的订阅关系索引
保存到当前连接的存储容器中
Object
1. 维护客户端和服务的订阅关系
TaskExecuteWorker
ProcessRunnable
2. 发布ServiceSubscribedEvent
Nacos Server
InstanceRequestHandler
根据客户端id获取对应的实例信息
NacosNamingService.subscribe()
建立Service和订阅Client的索引关系
响应事件
ConnectionBasedClientManager,管理客户端的长连接
客户端订阅服务地址变更事件
建立service和clientId的对应关系索引
ServiceStorage
接收变更推送
getAllInstances
ClientServiceIndexesManager
ServiceManager
serviceDataIndexes
查询服务地址列表
服务信息
ServiceQueryRequestHandler
NamingSubscriberServiceV2Impl.onEvent
ServiceInfo
2
Instance
0 条评论
回复 删除
下一页