寻找开头
通过bin目录下startup.sh可知道启动的是target下的jar包
由springboot的知识可知jar包下mf文件下会有主类
从客户端注册开始寻找,看看如何进行服务注册
由springboot可以知道jar包扫描类是要在spring.factories文件当中
注册的话大概率会在registry中(碰运气找找看)
在配置类中,最核心的一般是带auto的
进来看看继承关系,发现spring的事件监听类applicationListener
查看onApplication方法,发现bind中有start方法,像start、init这种都需要重点盯防
跟进来发现register()方法
跟入最深处会看到注册实例方法registerInstance()
一路跟进registerService方法可以看到就是将instance实例发送post请求
查看nacos的api就知道这个是请求注册instance的接口
从服务端查看服务注册。(源码中consistency部分中需要protobuf生成实体类)
查找对应的入口。nacos是标准的web项目,所以搜索controller,再加上我们知道的注册instance,来试着搜搜看。
可以看到从request中还原了instance,跟进registerInstance方法。从命名可以猜测主要步骤其实分为创建空的service和添加instance
首先明确nacos服务注册表的结构为Map<namespace,Map<group::serviceName>,Service>
跟进createEmptyService()方法,进入createServiceIfAbsent()方法,可以看到创建了空的service,并设置了基础属性。
看到了带有init的putServiceAndInit()方法,进去按照命名猜测前两个方法为放入service和service的init方法。