昨天,分析了NACOS动态配置的源代码分析。让我们看一下NACOS服务注册的相关源代码。
普通服务注册中心通常相同,如下:
NACOS的服务注册过程指示:
使用NACOS的服务注册功能,您需要介绍相应的依赖性:
根据《公约》
来自com.alibaba.cloud.nacos.nacos.rigizationry.nacosserviceregistrygistryautoconfiguration
Nacosautoservireregisttration类从Abstractautoservireregistration继承。查看整个继承关系,您可以看到AbstractAutoSereReRegistration实现了ApplicationListener界面
这很容易做到。我们直接找到与事件相关的方法。最后,它决定在AbstractautautautoserereReReReregistration类中达到ApplicationEvent(WebServerinitializatizationizationizatizatienializationizationizationizationizationizationizationizationizationizationizationizationizationizationizatizationizatizationizatizationizatizationizatizationizationizatizationizationizationed事件)。代码如下:
开始()方法的内容如下:
此寄存器方法最终将被调用到com.alibaba.cloud.nacos.regizationry.nacosserviceregistry#注册方法如下:如下:
它最终将致电com.alibaba.nacos.client.naming.net.namingproxy#registerservice
此时,已经分析了启动客户端时的注册服务代码。让我们看一下服务器的处理方式。
根据CALL/NACOS/V1/NS/实例路径,查找服务器的相应处理方法:com.alibaba.nacos.naming.controller.instancecontroller#regission
其中,GetInstanceOperator()的实施如下:
我们没有GRPC的方式,因此我们最终将转到com.alibaba.nacos.naming.core.instanceoperatorsrvimpl#registerinstance方法
RegisterInstance的实施如下:
跟踪createEmptyService()方法。您可以看到您首先尝试从ServiceMap的对象获得服务。在此SERVICEMAP中没有创建ServiceMap。您可以看到ServiceMap的数据结构是:
好吧,返回以上Addinstance方法的实现:
此关键定义将在以后使用,请首先记住
此put()方法将被调用到com.alibaba.nacos.naming.consistencencenceconssistencescyserviceimpl#put
实例是记录接口的子类
此处的PUT方法将在com.alibaba.nacos.naming.consistence.ephemeral.distroconssisteservimpl#put methot.senceSessence中调用。
输入方法的内容如下:
通知对象是实现可运行接口的内部类。addTask方法的内容如下:
其中,任务是阻止队列
当您在这里看到时,您会发现,将命名空间键和ServiceName的钥匙放入阻止队列后,整个注册请求基本上已经结束。那么真正的服务注册在哪里?答案是在Notifier对象和istroconsistenceserviceimpl对象中。
检查DistosisSencEscyServimpl对象的源代码。您可以找到一个init()方法。内容如下:
实际上,这要移交给线程池进行处理,而传输对象是前面提到的通知对象,因此您只需要检查run()通知器的方法即可。
接下来,查看hander()方法:
它将在此处称为com.alibaba.nacos.naming.core.core.service#onChange方法
更新方法最好理解。简而言之,注册服务放在clustermap的对象中
看一下com.alibaba.nacos.naming.core.cluster#updateips方法
服务注册的源代码等同于更好地理解。它不是写的。请批评并纠正它。谢谢你!
原始:https://juejin.cn/post/71009132222680576008
