Eureka源码阅读解析Server服务端启动流程实例

Eureka源码阅读解析: Server服务端启动流程实例

背景介绍

Eureka是Netflix开源的基于RESTful风格的服务注册和发现组件,主要是为了解决动态集群下的弹性的问题,尤其是在云计算中自动化资源管理的需求。

Server服务端启动流程说明

以下是Eureka Server服务端的启动流程:

  1. EurekaServerAutoConfiguration会注册以下bean:

  2. EurekaServerInitializerConfiguration

  3. EurekaServerBootstrap

  4. PeerAwareInstanceRegistryImpl

  5. EurekaServerContext

  6. PeerEurekaNode

  7. EurekaServerConfig

  8. EurekaServerInitializerConfiguration会注册以下bean:

  9. EurekaHealthStatusAggregator

  10. EurekaServerBootstrap会完成以下任务:

  11. 设置环境配置

  12. 初始化EurekaServerConfig

  13. 初始化自定义EurekaServerConfig(如果存在)

  14. 初始化EurekaServerContext

  15. 初始化PeerEurekaNode

  16. 初始化PeerAwareInstanceRegistryImpl

  17. PeerAwareInstanceRegistryImpl会完成以下任务:

  18. 启动心跳定时器

  19. 启动注册任务

  20. PeerEurekaNode会完成以下任务:

  21. 启动定时任务

  22. EurekaServerContext会注册以下bean:

  23. EurekaClientConfigBean

  24. EurekaInstanceConfigBean

  25. EurekaClientRegistry

  26. EurekaClientRegistry和PeerAwareInstanceRegistryImpl会建立注册表的联系

  27. 注册中心服务器启动成功

示例说明

下面是两个示例:

示例一

@ComponentScan(basePackages = {"com.netflix.eureka"})
@EnableAutoConfiguration
@EnableEurekaServer
public class EurekaServer {

    public static void main(String[] args) {
        new SpringApplicationBuilder(EurekaServer.class).web(WebApplicationType.SERVLET).run(args);
    }

}

此示例展示了如何使用Spring Boot快速搭建一个Eureka Server服务端。

示例二

@Configuration
public class EurekaServerConfig {

   @Value("${eureka.server.port:8761}")
   private int port;

   @Value("${eureka.service.url:http://${localhost}:8761/eureka/}")
   private String serviceUrl;

   @Value("${eureka.dashboard.url:http://${localhost}:8761}")
   private String dashboardUrl;

   @Bean
   public EurekaInstanceConfigBean eurekaInstanceConfigBean() {
       EurekaInstanceConfigBean instance = new EurekaInstanceConfigBean();
       instance.setNonSecurePort(port);
       instance.setInstanceId("${spring.application.name}:${server.port}");
       instance.setPreferIpAddress(true);
       instance.setIpAddress("localhost");
       instance.setVirtualHostName("localhost");
       instance.setSecurePortEnabled(false);
       return instance;
   }

   @Bean
   public EurekaServerConfig eurekaServerConfig(EurekaInstanceConfigBean eurekaInstanceConfigBean) {
       EurekaServerConfig server = new EurekaServerConfig();
       server.setShutDownClients(false);
       server.setHeartbeatExecutorThreadPoolSize(5);
       server.setServerSocketTimeout(30000);
       server.setRegistrySyncRetries(3);
       server.setShouldFetchRegistry(false);
       server.setPeerEurekaNodesUpdateIntervalMs(5000);
       server.setEvictionIntervalTimerInMs(60000);
       server.setPeerEurekaStatusRefreshTimeIntervalMs(1000);
       server.setMinAvailableInstancesForPeerReplication(2);
       server.setWaitTimeInMsWhenSyncEmpty(1000);
       server.setNumberOfReplicationRetries(3);
       server.setPeerEurekaNodesUpdateIntervalMs(5000);
       server.setInitialInstanceInfoReplicationIntervalSeconds(10);
       server.setEurekaServerURLContext("eureka");
       server.setHealthCheckEnabled(true);
       server.setRemoteRegionAppWhitelist("");
       server.setServerContext(server.getEurekaServerURLContext());
       server.setRemoteRegionRegistryFetchIntervalInSeconds(10);
       server.setPeerNodeConnectTimeoutMs(2000);
       server.setPeerNodeReadTimeoutMs(5000);
       server.setDeltaRetentionTimerIntervalInMs(300000);
       server.setDeltaRetentionTimerExpirationInMs(600000);
       server.setEnableSelfPreservation(true);
       server.setPrefetchRegistryCache(false);
       server.setPeerEurekaNode(eurekaInstanceConfigBean.getHostName() + ":" + eurekaInstanceConfigBean.getNonSecurePort());
       List<String> urls = new ArrayList<>();
       urls.add(serviceUrl);
       server.setServiceUrl(urls);
       return server;
   }

}

此示例展示了如何自定义Eureka Server配置。其中,EurekaInstanceConfigBean定义了注册中心服务器实例的相关配置,比如端口号、预先IP地址等;EurekaServerConfig定义了注册中心服务器的相关配置,比如心跳间隔、应用白名单、配置中心URL等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Eureka源码阅读解析Server服务端启动流程实例 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Laravel自动生成UUID,从建表到使用详解

    下面是“Laravel自动生成UUID,从建表到使用详解”的完整攻略。 1. 什么是UUID UUID是Universally Unique Identifier(通用唯一标识符)的缩写,是一种标准的32位数字和字母的组合,可以用来唯一标识一个实体,与数据类型无关,具有唯一性和跨平台性。在Laravel中,可以使用UUID来替代自增长的id作为模型的主键。 …

    other 2023年6月27日
    00
  • Win10 Build 19044.1862更新补丁KB5015878推送发布(附更新修复内容汇总)

    Win10 Build 19044.1862更新补丁KB5015878推送发布(附更新修复内容汇总) 本文将详细讲解Win10 Build 19044.1862更新补丁KB5015878的完整攻略,包括更新修复内容的汇总和两个示例说明。 更新修复内容汇总 以下是Win10 Build 19044.1862更新补丁KB5015878的修复内容汇总: 修复了网络…

    other 2023年8月3日
    00
  • Flash怎么自定义设置工作区?

    Flash 是一款强大的矢量动画制作软件,其默认的工作区布局可能不适合所有用户的需求,用户可以根据自己的需求进行自定义设置。下面是 Flash 怎么自定义设置工作区的完整攻略,包含两条示例说明: 步骤一:打开工作区布局面板 要自定义设置 Flash 工作区,首先需要打开工作区布局面板。方法如下: 在窗口菜单中选择 “工作区布局” 模块; 点击内部面板,打开工…

    other 2023年6月25日
    00
  • 如何删除一个win10的服务

    以下是“如何删除一个Win10的服务”的完整攻略: 如何删除一个Win10的服务 在Windows 10中,服务是一种在后台运行的程序,它们可以在系统启动时自启动,并在系统运行时提供各种功能。有时候,您可能需要删除某个服务,本攻略将介绍如何删除一个Win的服务。 方法1:使用命令行删除服务 您可以使用命令行工具sc.exe来删除服务。以下是一个示例: 打开命…

    other 2023年5月7日
    00
  • 简单谈谈C++ 头文件系列之(iosfwd)

    当我们使用C++编写程序时,有时候需要使用C++标准库的头文件,例如iostream、fstream等等。而在使用这些头文件时,我们通常会先包含iostream或fstream等文件,但是这些文件又包含了大量的定义和声明,这样在编译时会比较慢,因此,我们可以使用头文件iosfwd来替代这些头文件。 iosfwd头文件包含了一些标准库的前置声明,可以将一些标准…

    other 2023年6月27日
    00
  • 微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析

    微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析 一、前言 在微信小程序开发中,列表渲染功能是必不可少的功能之一。而列表下拉刷新及上拉加载是列表渲染的常见需求,本文将从实现方法分析角度对列表下拉刷新及上拉加载这一功能进行详细讲解。 二、实现思路 1. 下拉刷新 下拉刷新的实现思路如下: 在需要下拉刷新的页面添加一个scroll-view元素,并设…

    other 2023年6月25日
    00
  • .NET分页控件简单学习

    下面是对“.NET分页控件简单学习”的详细讲解攻略。 1. 简介 .NET分页控件是一种方便用户进行数据分页的控件。在大数据量的情况下,数据一次性展示在页面上不仅会降低网站性能,还会影响用户体验。因此使用.NET分页控件,将数据按照规定的条数进行分页展示,可以有效提高页面的性能,让用户能够更加便捷地获取需要的数据。 2. 安装 在使用.NET分页控件之前,需…

    other 2023年6月26日
    00
  • oracle数据库中日期时间的插入操作

    Oracle数据库中日期时间的插入操作 在Oracle数据库中,日期时间类型是一种非常重要的数据类型。在进行插入数据操作时,正确地插入日期时间数据,会对后续的数据统计和分析产生重要作用。因此,本文将介绍如何在Oracle数据库中正确地插入日期和时间数据。 插入日期 在Oracle中,日期数据类型为DATE,可以存储年、月、日、时、分、秒以及大约1/100秒的…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部