spring cloud consul服务注册源码分析

我们注册在consul上的服务,都是通过spring cloud consul discorvery来实现的,可以通过maven依赖导入spring-cloud-consul-discovery包。

对于spring项目,首先查看spring.factories文件:
spring cloud consul服务注册源码分析_第1张图片
从源码中可以找到服务注册、自动服务注册、配置、服务发现等功能所对应的类。对于服务自动注册,对应的就是ConsulAutoServiceRegistrationAutoConfiguration,通过@Bean自动注入了ConsulAutoServiceRegistration类
spring cloud consul服务注册源码分析_第2张图片
ConsulAutoServiceRegistration又继承了AbstractAutoServiceRegistration抽象类
在这里插入图片描述
在AbstractAutoServiceRegistration中,实现了ApplicationContextAware和ApplicationListener接口。下面分别对这两个接口进行分析。
在这里插入图片描述
1.ApplicationContextAware

这个接口里面只有一个方法setApplicationContext,如果实现了这个方法,Spring在启动的时候就需要实例化这个class,在实例化这个class的时候,发现它包含这个ApplicationContextAware接口的话,Spring就会调用这个对象的setApplicationContext方法,把applicationContext给塞进去。
在这里插入图片描述
而在AbstractAutoServiceRegistration中,重写的方法为:
在这里插入图片描述
知道了如何调用,那么又是如何触发的呢?

2.ApplicationListener

AbstractAutoServiceRegistration还实现了ApplicationListener接口,ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件处理;如果容器中存在ApplicationListener的Bean,当ApplicationContext调用publishEvent方法发送事件时,对应Bean的onApplicationEvent会被触发。
在这里插入图片描述
而在AbstractAutoServiceRegistration中,重写的方法为:
spring cloud consul服务注册源码分析_第3张图片
start()方法:
spring cloud consul服务注册源码分析_第4张图片
当收到web server初始化成功的事件之后,会触发bind方法,更新服务监听端口、发布预注册事件、开始注册、发布注册成功事件、更新服务运行标志。

触发之后,就会调用注册过程:
spring cloud consul服务注册源码分析_第5张图片
super.register(),register()的方法在ConsulServiceRegistry类中:
spring cloud consul服务注册源码分析_第6张图片
Consul api包中,调用了consul开源的注册API
spring cloud consul服务注册源码分析_第7张图片
至此,注册逻辑结束。

你可能感兴趣的:(spring,cloud,java-consul,consul)