客服端分析
客户端主动拉取的情况如下:
在NacosDiscoveryClient类中可以找到,调用NacosNamingService的selectInstances方法
主要调用HostReactor的getServiceInfo方法
getServiceInfo方法中主要做了几件事,获取本地缓存的ServiceInfo,从服务端获取ServiceInfo,定时任务更新ServiceInfo从本地缓存中,就是从map中获取
从服务端获取,发送http请求,processServiceJSON方法将返回结果封装成ServiceInfo存入serviceInfoMap中,并写入磁盘中。
定时任务方法如下,
添加一个UpdateTask任务,每一秒执行
UpdateTask的run方法中,可以看到不断的调用 updateServiceNow方法,不断的从服务器获取ServiceInfo信息。
客户端接收服务端发送的UDP信息:
在HostReactor实例化的时候,会实例化一个PushRecver
创建了一个udpSocket,并且不断的执行一个异步任务,这个任务就是他自己
在HostReactor的run方法中,可以看到,从udpSocket中获取服务端发送的数据,这个数据如果是dom类型的,会调用HostReactor的processServiceJSON方法,将数据存入到serviceMap中,并持久化到磁盘。
服务端返回服务集合
在ServiceController的list请求中
ServiceOperatorV1Impl调用listService
调用ServiceManager的chooseServiceMap方法,直接从serviceMap中获取。
这是服务端接口返回数据的逻辑,UPD的方式是在服务注册的时候就已经开始了。