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

摘要:
一如何启动源代码流程:spring cloud一般集成了各种框架,基本上使用了spring boot的自动组装机制,即在依赖包下,META-INF文件夹,spring Factories文件,其中包含一些配置类来启动框架。根据这一原则,我们可以看到与服务注册相关的两个类:ConsulAutoServiceRegistrationAutoConfiguration ConsulService

一.如何入手源码过程:一般springcloud整合各大框架,基本都用到了springboot的自动装配机制,也就是在依赖包下,META-INF文件夹,spring.factories文件,包含了启动该框架的一些配置类

根据这个原则,我们查看:

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

 由此我们发现了2个跟服务注册相关的类:

ConsulAutoServiceRegistrationAutoConfiguration

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

 ConsulServiceRegistryAutoConfiguration:

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

 通过这2个配置类,向spring容器中导入了注册相关的几个重要类:

我们先分析: ConsulAutoRegistration

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

从继承体系看,它继承了ConsulRegistration:

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

 该类中有个NewService,我们的服务向注册中心注册,肯定要告诉注册中心,服务的一些基本信息吧,如ip 端口 服务名称 服务实例ID

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

 注册的过程,就是将该对象发送到注册中心,这些信息配置在application.yml中:

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

 后续我们分析:ConsulAutoServiceRegistration对象,它是注册的过程的核心,也就是它将上面的NewService推送给注册中心的:

先看看它的方法有哪些:

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

 既然有注册方法,那问题是,该方法什么时候调用呢?

继续分析该类的继承体系:

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

 分析该类的父类:

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

 我们发现,该类监听了WebServerInitializedEvent初始化事件,啥意思,该事件就是tomcat启动完毕的事件,我们debug在该方法,启动项目:

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

 继承跟踪debug

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

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

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

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

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

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

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

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

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

 我们看看请求的json:

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

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

 请求的路径是啥:

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

 所以,请求的路径是:http:ip:端口/v1/agent/service/register,请求方式PUT 请求参数是上面的json 因此,我们也可以自己使用postMan进行注册

拓展:如果我某个服务启动了多台机,那么该服务在注册中心的存储格式是啥:Map<String,List<NewSerivce>> map; 这个就是注册中心注册列表的大概结构了,key是服务名称,同个服务名,不同实例,实例编号是不一样的






















免责声明:文章转载自《consul注册中心服务注册过程源码分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Elasticsearch集群运维软件架构 "4+1" 视图模型下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

TFS(Team Foundation Server)简介和新手入门

在两部分的文章。我会介绍Team Foundation Server一些核心功能,着重于产品的日常应用是如何将这些功能结合使用。 作为一个软件开发。在我的职业生涯,。我常常用于支持软件开发过程中大量的开发工具,版本控制工具如、包、生成脚本语言、单元測试框架和需求分析工具等等。在.NET平台上,大量的支持工具可以非常好地独立工作,可是。为了使得各种工具之间...

netty源码-server端绑定端口流程

仅用于记录在分析netty源码的日志 源码调用关系图 Netty Server示例 EventLoopGroup boss = new NioEventLoopGroup(1); EventLoopGroup io = new NioEventLoopGroup(); ServerBootstrap boo...

在 github 上获取源码

 比如访问: https://github.com/alifellod/NWebGather  可以找到下面的源码获取方式。 在github开源项目的页面上可以找到上图的三个获取源码方式。 使用git的网址,可以使用比如TortoiseGit这里的客户端软件获取源码 TortoiseGit 如下图,如果安装了TortoiseGit,那么在一个还没有建立...

1、Dubbo源码解析--Dubbo如何驱动Spring IOC容器并配合工作的?

首先Spring要注入自己的bean需要在Spring-provider.xml(提供者spring注入文件,名字可能不一样)添加bean注入,其中有dubbo的自定义标签,xml如何识别这些标签?拿到标签如何注入到Spring Container?一般需要如下几个步骤:   1)、设计配置属性和JavaBean     设计属性即dubbo.xsd中的a...

手写Redux-Saga源码

上一篇文章我们分析了Redux-Thunk的源码,可以看到他的代码非常简单,只是让dispatch可以处理函数类型的action,其作者也承认对于复杂场景,Redux-Thunk并不适用,还推荐了Redux-Saga来处理复杂副作用。本文要讲的就是Redux-Saga,这个也是我在实际工作中使用最多的Redux异步解决方案。Redux-Saga比Redux...

Cscope how to support java and c++

Cscope 首先在文件夹下建立cscope索引文件 find -name '*.c' > cscope.file cscope -Rbkq 这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。 当中cscope.out是主要的符号索引,后两个文件是使用"-q"选项生成的。能够加快cscope...