Spring Cloud Eureka是什么
spring cloud中的服务注册中心eureka。
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client用于简化与Eureka Server的交互,在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
Spring Cloud Eureka源码解析
正常一个EurekaServer会使用**@EnableEurekaServer**注解,可以看见它的import类里创建了一个Marker对象,这是用来激活配置文件的配置类的。
@Configuration(proxyBeanMethods = false)
public class EurekaServerMarkerConfiguration {
@Bean
public Marker eurekaServerMarkerBean() {
return new Marker();
}
class Marker {
}
}
接下来看配置文件,EurekaServer包下,有spring.factories文件,里面会装配类org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration,这是springboot的知识,我们详细看下EurekaServerAutoConfiguration
@Configuration(proxyBeanMethods = false)
@Import(EurekaServerInitializerConfiguration.class)
// 有了上面的Marker类才会激活这个类
@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)
@EnableConfigurationProperties({ EurekaDashboardProperties.class, InstanceRegistryProperties.class })
@PropertySource("classpath:/eureka/server.properties")
public class EurekaServerAutoConfiguration implements WebMvcConfigurer {
}
这个类主要配置了以下bean,列出部分
EurekaController
ServerCodecs的实现类CloudServerCodecs
PeerAwareInstanceRegistry的实现类InstanceRegistry
EurekaServerBootstrap
EurekaServerContext的实现类DefaultEurekaServerContext
FilterRegistrationBean和javax.ws.rs.core.Application这是2个组合成一个Jersey的过滤器,会扫描Eureka下的com.netflix.discovery和com.netflix.eureka包下的@Path,@POST等方法提供接口
我们再来看import的EurekaServerInitializerConfiguration这个类
@Override
public void start() {
new Thread(() -> {
try {
// 初始化服务
eurekaServerBootstrap.contextInitialized(EurekaServerInitializerConfiguration.this.servletContext);
lo