Spring Cloud - Eureka服务注册
之前分析过Spring Cloud的Eureka服务发现, 今天分析一下服务注册.
配置
BootstrapConfiguration
EurekaDiscoveryClientConfigServiceBootstrapConfiguration
spring-cloud-config环境中使用的配置
引入EurekaDiscoveryClientConfiguration
和EurekaClientAutoConfiguration
EurekaDiscoveryClientConfiguration
- 在spring-cloud中(通过是否存在RefreshScopeRefreshedEvent.class判断), 添加
RefreshScopeRefreshedEvent
的listener. 收到事件后重新注册实例. - 在
eureka.client.healthcheck.enabled
设置为true时, 注册EurekaHealthCheckHandler
bean.EurekaHealthCheckHandler
负责将应用状态映射为实例状态InstanceStatus
.
EurekaClientAutoConfiguration
支持spring-cloud和非spring-cloud环境, 在spring-cloud环境中, 下面两个bean要使用@RefreshScope
标注
- 实例化
EurekaClient
bean, 在spring-cloud中使用实现类CloudEurekaClient
. - 使用
EurekaInstanceConfig
实例, 实例化ApplicationInfoManager
bean
EnableAutoConfiguration
EurekaClientConfigServerAutoConfiguration
在spring-cloud-config的环境中, 将configPath
加入到实例的metadata map中.
EurekaDiscoveryClientConfigServiceAutoConfiguration
当config客户端希望通过服务发现寻找config服务的时候使用的引导配置
在spring.cloud.config.discovery.enabled
为true
时, 关闭父application context里实例化的EurekaClient
实例. 只使用当前上下文里的实例.
EurekaClientAutoConfiguration
核心配置
支持spring-cloud(支持动态配置)和非spring-cloud环境, EurekaClient
和EurekaInstanceConfig
两个bean要使用@RefreshScope
标注
- 实例化当前服务实例信息
EurekaInstanceConfigBean
的实例 - 实例化
DiscoveryClient
的实现, 在这里是EurekaDiscoveryClient
- 实例化
EurekaServiceRegistry
- 实例化
EurekaRegistration
- 实例化
EurekaAutoServiceRegistration
, 这个类实现了StartLifecycle接口. 在ApplicationContext refresh或者shutdown之后注册或者注销当前实例 - 实例化
EurekaClient
bean, 在spring-cloud中使用实现类CloudEurekaClient
- 使用
EurekaInstanceConfig
实例, 实例化ApplicationInfoManager
bean
RibbonEurekaAutoConfiguration
当启用Eureka client(eureka.client.enable为true和ribbon.eureka.enabled为true时, 默认为true)时配置默认基于eureka的ribbon.
使用EurekaRibbonClientConfiguration
提供的配置: RibbonPing, ServerList, ServerIntrospector.
EurekaDiscoveryClientConfiguration
提供监听RefreshScopeRefreshedEvent
的监听器, 当事件发生时注销并重新注册(防止metadata发生改变)
提供一个默认的EurekaHealthCheckHandler实例, 当bean不存在的且eureka.client.healthcheck.enabled
为true时.
主要类
ServiceRegistry
spring提供的服务实例注册和注销的接口.
EurekaServiceRegistry
ServiceRegistry的Eureka实现. 注册和注销的实现是通过EurekaRegistration
的ApplicationInfoManager
修改实例状态实现的.
EurekaRegistration
通过实现ServiceInstance
提供访问实例信息的接口,
ApplicationInfoManager
提供修改实例状态的接口, 并通知状态变化的监听器.
提供内部类StatusChangeListener
.
提供注册和注销状态变化监听器的接口, Eureka的DiscoveryClient
中通过匿名类的方式实现了该接口, 当实例状态发生变化时, 刷新实例状态.