nacos服务发现流程

nacos服务发现流程

前面已经知道nacos服务是怎么注册的了,那么nacos对注册的服务又是怎么发现的呢。
1、 既然我们已经知道nacos服务是怎么注册的了,那么点击服务注册的流程里面,查找到最后想服务端发送请求的地方。
nacos服务发现流程
2、 在最后向服务端发送请求的地方打上断点,调试启动客户端。可以发现客户端最终是通过http请求想服务端发送了一个POST请求。
链接地址:http://192.168.0.60:8848/nacos/v1/ns/instance
nacos服务发现流程
3、 既然我们知道nacos是向服务端发送什么了,那么在服务端源码中找到接收客户端服务注册的地方,最终找到了InstanceController中的register方法
nacos服务发现流程
4、 根据代码可以看出。注册方法中只做调用ServiceManager中的registerInstance方法,并在调用前会将客户端传过来的参数信息封装成一个Instance实例
nacos服务发现流程
5、 点击进入registerInstance方法,处理了两个流程,创建了一个服务,添加了一个实例
nacos服务发现流程
6、 先看看创建服务的流程,点击createEmptyService,发现其实际上是在服务当前服务名称不存在时候才会去创建一个服务,继续调用putserviceAndInit方法。
nacos服务发现流程
7、 点击查看putServiceAndInit方法,在该方法中做了几件事情putService,服务的init和集群之间一致性的处理
nacos服务发现流程
8、 init是处理与客户端的健康检查,consistencyService.listen是用于一致性处理的,服务发现的流程中不细描述,点击查看putService,
nacos服务发现流程
9、 发现最终讲服务放入了一个serviceMap中,该map维护了一个键为namespace,值为一个存放服务名称为键,服务为值的map
nacos服务发现流程
10、 这样一个服务就创建完成,下面在来查看实例的创建流程,回到ServiceManage当中的registerInstance,查看添加实例的流程 addInstance
nacos服务发现流程
11、 点开addInstance方法,主要存在两个处理,一个是去获取所有的实例列表,一个是处理所有实例的流程
nacos服务发现流程

12、 获取实例列表暂时不描述,点击处理实例的方法consistencyService.put(),
consistencyService这里有三个实现,这里会根据key的值的参数判断最终是走的哪个实现,最终会走到DistroConsistencyServiceImpl
nacos服务发现流程
13、 打开distroConsistencyServiceImpl的put方法,一个是处理实例的方法,一个是处理实例最终一致性的同步任务
nacos服务发现流程

14、 点卡onput方法,发现实例最终放入到Datum当中并将Datum放入到DataStore当中
nacos服务发现流程

15、 整个服务流程就已经处理完了,这里只整理了服务的发现流程。以上都是自己在学习nacos源码时整理的笔记,不一定正确。