Spring Cloud Eureka Server启动步骤详解是怎样的?

2026-05-21 03:333阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1048个文字,预计阅读时间需要5分钟。

Spring Cloud Eureka Server启动步骤详解是怎样的?

前言:SpringBoot与SpringCloud版本对应关系:https://start.spring.io/actuator/info SpringCloud与Spring Cloud Alibaba版本对应关系:https://hub.fastgit.org/alibaba/spring-cloud-alibaba/wiki/版本说明

前言

SpringBoot与SpringCloud版本对应关系:start.spring.io/actuator/info

 

SpringCloud与Spring-Cloud-Alibaba版本对应关系:hub.fastgit.org/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

 

spring官网也能看到springboot与springcloud版本对应关系:spring.io/projects/spring-cloud-alibaba#learn

注册中心本质:存储每个客户端的注册信息,EurekaClient从EurekaServer同步获取服务注册列表,通过一定的规则选择一个服务进行调用。Eureka架构图如下:

Spring Cloud Eureka Server启动步骤详解是怎样的?

  • 服务提供者:是一个Eureka client,向 Eureka Server注册和更新自己的信息,同时能从Eureka Server注册表中获取到其他服务的信息。

  • 服务注册中心:提供服务注册和发现的功能。每个Eureka Client向Eureka Server注册自己的信息,也可以通过Eureka Server获取到其他服务的信息达到发现和调用其他服务的目的。

  • 服务消费者:是一个Eureka client,通过Eureka Server获取注册的其他服务信息,从而找到所需要的服务发起远程调用。

  • 注册:服务提供者向Eureka Server端注册自身的元数据以供服务发现。

  • 续约:通过发送心跳到Server以维持和更新注册表中服务实例元数据的有效性。在一定时长内,Server没有收到Client的心跳信息,将默认下线,会把服务实例信息从注册表中删除。

  • 下线:服务提供方在关闭时候主动向Server注销服务实例元数据,这时服务提供方实例数据将从Server的注册表中删除。

  • 获取注册表:服务消费者Client向Server请求注册表信息,用于服务发现,从而发起远程调用。

Eureka Server源码

EnableEurekaServer注解作用

  • 通过 @EnableEurekaServer 激活EurekaServer
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Import({EurekaServerMarkerConfiguration.class}) public @interface EnableEurekaServer { }

此类有一个重要作用:导入EurekaServerMarkerConfiguration配置类实例化了一个Marker的bean对象,此对象是实例化核心配置类的前提条件

//激活 EurekaServerAutoConfiguration 的开关 @Configuration(proxyBeanMethods = false) public class EurekaServerMarkerConfiguration { @Bean public Marker eurekaServerMarkerBean() { return new Marker(); } class Marker { } }

自动装载核心配置类

SpringCloud对EurekaServer的封装使得发布一个EurekaServer无比简单,根据自动装载原则可以在spring-cloud-netflix-eureka-server-2.2.5.RELEASE.jar下的META-INF目录下找到 spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration

EurekaServerAutoConfiguration

@Configuration(proxyBeanMethods = false) @Import(EurekaServerInitializerConfiguration.class) @ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class) @EnableConfigurationProperties({ EurekaDashboardProperties.class, InstanceRegistryProperties.class }) @PropertySource("classpath:/eureka/server.properties") public class EurekaServerAutoConfiguration implements WebMvcConfigurer { /** * List of packages containing Jersey resources required by the Eureka server. */ private static final String[] EUREKA_PACKAGES = new String[] { "com.netflix.discovery", "com.netflix.eureka" }; @Autowired private ApplicationInfoManager applicationInfoManager; @Autowired private EurekaServerConfig eurekaServerConfig; @Autowired private EurekaClientConfig eurekaClientConfig; @Autowired private EurekaClient eurekaClient; @Autowired private InstanceRegistryProperties instanceRegistryProperties; }

现在我们展开来说这个Eureka服务端的自动配置类;

  • 1、这个配置类实例化的前提条件是上下文中存在EurekaServerMarkerConfiguration.Marker 这个bean,解释了上面的问题。

  • 2、通过@EnableConfigurationProperties({ EurekaDashboardProperties.class,InstanceRegistryProperties.class })导入了两个配置类:

    • 1、EurekaDashboardProperties:配置 EurekaServer的管控台
    • 2、InstanceRegistryProperties:配置期望续约数量和默认的通信数量
    • 3、通过@Import({EurekaServerInitializerConfiguration.class})引入启动配置类

EurekaServerAutoConfiguration作为自动配置类,我们看看它主要配置了哪些东西。

EurekaServerConfig

  • 初始化EurekaServer相关配置

EurekaController

  • 服务治理少不了需要一个DashBoard来可视化监控,EurekaController基于springmvc提供DashBoard相关的功能。
@Bean @ConditionalOnProperty(prefix = "eureka.dashboard", name = "enabled", matchIfMissing = true) public EurekaController eurekaController() { return new EurekaController(this.applicationInfoManager); }

PeerAwareInstanceRegistry

  • 初始化集群注册,发现注册作为主要的核心功能。
@Bean public PeerAwareInstanceRegistry peerAwareInstanceRegistry( ServerCodecs serverCodecs) { this.eurekaClient.getApplications(); // force initialization return new InstanceRegistry(this.eurekaServerConfig, this.eurekaClientConfig, serverCodecs, this.eurekaClient, this.instanceRegistryProperties.getExpectedNumberOfClientsSendingRenews(), this.instanceRegistryProperties.getDefaultOpenForTrafficCount()); }

PeerEurekaNodes

  • 初始化集群节点集合
@Bean @ConditionalOnMissingBean public PeerEurekaNodes peerEurekaNodes(PeerAwareInstanceRegistry registry, ServerCodecs serverCodecs, ReplicationClientAdditionalFilters replicationClientAdditionalFilters) { return new RefreshablePeerEurekaNodes(registry, this.eurekaServerConfig, this.eurekaClientConfig, serverCodecs, this.applicationInfoManager, replicationClientAdditionalFilters); }

EurekaServerContext

  • 基于eureka server配置注册表,集群节点集合以及服务实例初始化eureka server上下文。
@Bean @ConditionalOnMissingBean public EurekaServerContext eurekaServerContext(ServerCodecs serverCodecs, PeerAwareInstanceRegistry registry, PeerEurekaNodes peerEurekaNodes) { return new DefaultEurekaServerContext(this.eurekaServerConfig, serverCodecs, registry, peerEurekaNodes, this.applicationInfoManager); }

EurekaServerBootstrap

  • 初始化Spring Cloud包装的Eureka原生启动类
@Bean public EurekaServerBootstrap eurekaServerBootstrap(PeerAwareInstanceRegistry registry, EurekaServerContext serverContext) { return new EurekaServerBootstrap(this.applicationInfoManager, this.eurekaClientConfig, this.eurekaServerConfig, registry, serverContext); }

FilterRegistrationBean

  • 初始化jerseyFilter
@Bean public FilterRegistrationBean<?> jerseyFilterRegistration( javax.ws.rs.core.Application eurekaJerseyApp) { FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<Filter>(); bean.setFilter(new ServletContainer(eurekaJerseyApp)); bean.setOrder(Ordered.LOWEST_PRECEDENCE); bean.setUrlPatterns( Collections.singletonList(EurekaConstants.DEFAULT_PREFIX + "/*")); return bean; }

Jersey提供rpc调用

  • Jersey是一个restful风格的基于www.cnblogs.com/dalianpai/p/12263438.html

    www.cnblogs.com/liukaifeng/p/10052590.html

    www.cnblogs.com/zooking/p/13795257.html

    www.cnblogs.com/pjjlt/p/11019247.html

本文共计1048个文字,预计阅读时间需要5分钟。

Spring Cloud Eureka Server启动步骤详解是怎样的?

前言:SpringBoot与SpringCloud版本对应关系:https://start.spring.io/actuator/info SpringCloud与Spring Cloud Alibaba版本对应关系:https://hub.fastgit.org/alibaba/spring-cloud-alibaba/wiki/版本说明

前言

SpringBoot与SpringCloud版本对应关系:start.spring.io/actuator/info

 

SpringCloud与Spring-Cloud-Alibaba版本对应关系:hub.fastgit.org/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

 

spring官网也能看到springboot与springcloud版本对应关系:spring.io/projects/spring-cloud-alibaba#learn

注册中心本质:存储每个客户端的注册信息,EurekaClient从EurekaServer同步获取服务注册列表,通过一定的规则选择一个服务进行调用。Eureka架构图如下:

Spring Cloud Eureka Server启动步骤详解是怎样的?

  • 服务提供者:是一个Eureka client,向 Eureka Server注册和更新自己的信息,同时能从Eureka Server注册表中获取到其他服务的信息。

  • 服务注册中心:提供服务注册和发现的功能。每个Eureka Client向Eureka Server注册自己的信息,也可以通过Eureka Server获取到其他服务的信息达到发现和调用其他服务的目的。

  • 服务消费者:是一个Eureka client,通过Eureka Server获取注册的其他服务信息,从而找到所需要的服务发起远程调用。

  • 注册:服务提供者向Eureka Server端注册自身的元数据以供服务发现。

  • 续约:通过发送心跳到Server以维持和更新注册表中服务实例元数据的有效性。在一定时长内,Server没有收到Client的心跳信息,将默认下线,会把服务实例信息从注册表中删除。

  • 下线:服务提供方在关闭时候主动向Server注销服务实例元数据,这时服务提供方实例数据将从Server的注册表中删除。

  • 获取注册表:服务消费者Client向Server请求注册表信息,用于服务发现,从而发起远程调用。

Eureka Server源码

EnableEurekaServer注解作用

  • 通过 @EnableEurekaServer 激活EurekaServer
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Import({EurekaServerMarkerConfiguration.class}) public @interface EnableEurekaServer { }

此类有一个重要作用:导入EurekaServerMarkerConfiguration配置类实例化了一个Marker的bean对象,此对象是实例化核心配置类的前提条件

//激活 EurekaServerAutoConfiguration 的开关 @Configuration(proxyBeanMethods = false) public class EurekaServerMarkerConfiguration { @Bean public Marker eurekaServerMarkerBean() { return new Marker(); } class Marker { } }

自动装载核心配置类

SpringCloud对EurekaServer的封装使得发布一个EurekaServer无比简单,根据自动装载原则可以在spring-cloud-netflix-eureka-server-2.2.5.RELEASE.jar下的META-INF目录下找到 spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration

EurekaServerAutoConfiguration

@Configuration(proxyBeanMethods = false) @Import(EurekaServerInitializerConfiguration.class) @ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class) @EnableConfigurationProperties({ EurekaDashboardProperties.class, InstanceRegistryProperties.class }) @PropertySource("classpath:/eureka/server.properties") public class EurekaServerAutoConfiguration implements WebMvcConfigurer { /** * List of packages containing Jersey resources required by the Eureka server. */ private static final String[] EUREKA_PACKAGES = new String[] { "com.netflix.discovery", "com.netflix.eureka" }; @Autowired private ApplicationInfoManager applicationInfoManager; @Autowired private EurekaServerConfig eurekaServerConfig; @Autowired private EurekaClientConfig eurekaClientConfig; @Autowired private EurekaClient eurekaClient; @Autowired private InstanceRegistryProperties instanceRegistryProperties; }

现在我们展开来说这个Eureka服务端的自动配置类;

  • 1、这个配置类实例化的前提条件是上下文中存在EurekaServerMarkerConfiguration.Marker 这个bean,解释了上面的问题。

  • 2、通过@EnableConfigurationProperties({ EurekaDashboardProperties.class,InstanceRegistryProperties.class })导入了两个配置类:

    • 1、EurekaDashboardProperties:配置 EurekaServer的管控台
    • 2、InstanceRegistryProperties:配置期望续约数量和默认的通信数量
    • 3、通过@Import({EurekaServerInitializerConfiguration.class})引入启动配置类

EurekaServerAutoConfiguration作为自动配置类,我们看看它主要配置了哪些东西。

EurekaServerConfig

  • 初始化EurekaServer相关配置

EurekaController

  • 服务治理少不了需要一个DashBoard来可视化监控,EurekaController基于springmvc提供DashBoard相关的功能。
@Bean @ConditionalOnProperty(prefix = "eureka.dashboard", name = "enabled", matchIfMissing = true) public EurekaController eurekaController() { return new EurekaController(this.applicationInfoManager); }

PeerAwareInstanceRegistry

  • 初始化集群注册,发现注册作为主要的核心功能。
@Bean public PeerAwareInstanceRegistry peerAwareInstanceRegistry( ServerCodecs serverCodecs) { this.eurekaClient.getApplications(); // force initialization return new InstanceRegistry(this.eurekaServerConfig, this.eurekaClientConfig, serverCodecs, this.eurekaClient, this.instanceRegistryProperties.getExpectedNumberOfClientsSendingRenews(), this.instanceRegistryProperties.getDefaultOpenForTrafficCount()); }

PeerEurekaNodes

  • 初始化集群节点集合
@Bean @ConditionalOnMissingBean public PeerEurekaNodes peerEurekaNodes(PeerAwareInstanceRegistry registry, ServerCodecs serverCodecs, ReplicationClientAdditionalFilters replicationClientAdditionalFilters) { return new RefreshablePeerEurekaNodes(registry, this.eurekaServerConfig, this.eurekaClientConfig, serverCodecs, this.applicationInfoManager, replicationClientAdditionalFilters); }

EurekaServerContext

  • 基于eureka server配置注册表,集群节点集合以及服务实例初始化eureka server上下文。
@Bean @ConditionalOnMissingBean public EurekaServerContext eurekaServerContext(ServerCodecs serverCodecs, PeerAwareInstanceRegistry registry, PeerEurekaNodes peerEurekaNodes) { return new DefaultEurekaServerContext(this.eurekaServerConfig, serverCodecs, registry, peerEurekaNodes, this.applicationInfoManager); }

EurekaServerBootstrap

  • 初始化Spring Cloud包装的Eureka原生启动类
@Bean public EurekaServerBootstrap eurekaServerBootstrap(PeerAwareInstanceRegistry registry, EurekaServerContext serverContext) { return new EurekaServerBootstrap(this.applicationInfoManager, this.eurekaClientConfig, this.eurekaServerConfig, registry, serverContext); }

FilterRegistrationBean

  • 初始化jerseyFilter
@Bean public FilterRegistrationBean<?> jerseyFilterRegistration( javax.ws.rs.core.Application eurekaJerseyApp) { FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<Filter>(); bean.setFilter(new ServletContainer(eurekaJerseyApp)); bean.setOrder(Ordered.LOWEST_PRECEDENCE); bean.setUrlPatterns( Collections.singletonList(EurekaConstants.DEFAULT_PREFIX + "/*")); return bean; }

Jersey提供rpc调用

  • Jersey是一个restful风格的基于www.cnblogs.com/dalianpai/p/12263438.html

    www.cnblogs.com/liukaifeng/p/10052590.html

    www.cnblogs.com/zooking/p/13795257.html

    www.cnblogs.com/pjjlt/p/11019247.html