一.如何入手源码过程:一般springcloud整合各大框架,基本都用到了springboot的自动装配机制,也就是在依赖包下,META-INF文件夹,spring.factories文件,包含了启动该框架的一些配置类
根据这个原则,我们查看:
由此我们发现了2个跟服务注册相关的类:
ConsulAutoServiceRegistrationAutoConfiguration
ConsulServiceRegistryAutoConfiguration:
通过这2个配置类,向spring容器中导入了注册相关的几个重要类:
我们先分析: ConsulAutoRegistration
从继承体系看,它继承了ConsulRegistration:
该类中有个NewService,我们的服务向注册中心注册,肯定要告诉注册中心,服务的一些基本信息吧,如ip 端口 服务名称 服务实例ID
注册的过程,就是将该对象发送到注册中心,这些信息配置在application.yml中:
后续我们分析:ConsulAutoServiceRegistration对象,它是注册的过程的核心,也就是它将上面的NewService推送给注册中心的:
先看看它的方法有哪些:
既然有注册方法,那问题是,该方法什么时候调用呢?
继续分析该类的继承体系:
分析该类的父类:
我们发现,该类监听了WebServerInitializedEvent初始化事件,啥意思,该事件就是tomcat启动完毕的事件,我们debug在该方法,启动项目:
继承跟踪debug
我们看看请求的json:
请求的路径是啥:
所以,请求的路径是:http:ip:端口/v1/agent/service/register,请求方式PUT 请求参数是上面的json 因此,我们也可以自己使用postMan进行注册
拓展:如果我某个服务启动了多台机,那么该服务在注册中心的存储格式是啥:Map<String,List<NewSerivce>> map; 这个就是注册中心注册列表的大概结构了,key是服务名称,同个服务名,不同实例,实例编号是不一样的