前言
consul是什么,大家如果还不知道的,可以先简单百度下,后续会出文章详细的介绍consul,大家可以把它当作服务治理框架,这里我们主要讲解它服务注册部分,在spring下它是怎么进行服务注册的。
按照SpringBoot的一贯作法来说这里会有一个starter pom 。
对于spring starter项目,我们一般首先看该文件:spring.provides 。
下面我们来看下spring-cloud-starter-consul,进入该meta-inf文件夹下的spring.provides:
provides: spring-cloud-consul-discovery
可以看到该starter会自动引入spring-cloud-consul-discovery
包。
同样的,对于一个spring项目,我们一般首先查看该文件:spring.factories 。
下面我们来看下spring-cloud-consul-discovery,进入其meta-inf文件夹下的spring.factories:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.consul.discovery.RibbonConsulAutoConfiguration,\
org.springframework.cloud.consul.discovery.configclient.ConsulConfigServerAutoConfiguration,\
org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistrationAutoConfiguration,\
org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistryAutoConfiguration,\
org.springframework.cloud.consul.discovery.ConsulDiscoveryClientConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.cloud.consul.discovery.configclient.ConsulDiscoveryClientConfigServiceBootstrapConfiguration
从上面我们可以看到,服务注册和自动服务注册,配置,服务发现等功能都提供了对应的自动注册的逻辑。
下面我们来看下自动服务注册的逻辑
服务自动注册
通过上面我们知道,在容器启动的时候,会执行ConsulAutoServiceRegistrationAutoConfiguration
的自动配置。ConsulAutoServiceRegistrationAutoConfiguration
部分代码如下:
@Bean
@ConditionalOnMissingBean
public ConsulAutoServiceRegistration consulAutoServiceRegistration(ConsulServiceRegistry registry, AutoServiceRegistrationProperties autoServiceRegistrationProperties, ConsulDiscoveryProperties properties, ConsulAutoRegistration consulRegistration) {
return new ConsulAutoServiceRegistration(registry, autoServiceRegistrationProperties, properties, consulRegistration);
}
可以看到,这里通过@Bean
自动注入了ConsulAutoServiceRegistration
类 而ConsulAutoServiceRegistration
又是继承的AbstractAutoServiceRegistration
抽象类,自动注册的大部分逻辑都在这个类里面,下面