consul注册中心服务注册过程源码分析

一.如何入手源码过程:一般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是服务名称,同个服务名,不同实例,实例编号是不一样的

 

 

 

 

 

 

 

 

























 

posted @ 2021-08-04 11:12  yangxiaohui227  阅读(627)  评论(0)    收藏  举报