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

yizhihongxing

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日

相关文章

  • 使用Android WebSocket实现即时通讯功能

    使用Android WebSocket实现即时通讯功能 WebSocket是一种网络通信协议,它能够在客户端和服务器之间创建一个双向的通信机制,使得实时通讯得到更好的支持。在Android平台上,我们可以使用原生的java.net.WebSocket或第三方库实现WebSocket通讯功能。 使用java.net.WebSocket实现WebSocket通讯…

    other 2023年6月27日
    00
  • 使用css实现水波加载动画效果

    使用 CSS 实现水波加载动画效果是一种很酷炫的效果,可以增加网站的用户体验。以下是实现水波加载动画的完整攻略: 1. 准备工作 首先,在 HTML 文件中创建一个 div 元素,并给它设一个 id 如「wave-bg」,用于装载动画。 <div id="wave-bg"></div> 2. 使用 CSS 绘制水波…

    other 2023年6月25日
    00
  • Visual Studio+VAssistX自动添加注释,函数头注释,文件头注释

    在Visual Studio中,可以使用VAssistX插件来自动添加注释、函数头注释和文件头注释。下面是一个完整的攻略,包括安装插件、配置插件和使用插件等方面的内容。 安装插件 要安装VAssistX插件,请按照以下步骤操作: 打开Visual Studio编辑器,单击菜单栏中的“Tools”选项。 在下拉菜单中选择“Extensions and Upda…

    other 2023年5月5日
    00
  • [下载]苹果iOS9.1 Beta5固件下载地址大全

    [下载]苹果iOS9.1 Beta5固件下载地址大全攻略 苹果iOS9.1 Beta5固件是苹果公司发布的一款测试版本固件,本攻略将详细介绍如何下载该固件以及提供下载地址大全。请按照以下步骤进行操作: 步骤一:准备工作 在开始下载iOS9.1 Beta5固件之前,请确保您已经完成以下准备工作: 确认您的设备兼容性:iOS9.1 Beta5固件可能只适用于特定…

    other 2023年8月4日
    00
  • C#开发Winform实现窗体间相互传值

    下面是详细讲解“C#开发Winform实现窗体间相互传值”的完整攻略: 目录 背景与前置知识 方法一:通过构造函数传参 示例1:从FormA传递数据到FormB 示例2:从FormB传递数据到FormA 方法二:通过属性传参 示例1:从FormA传递数据到FormB 示例2:从FormB传递数据到FormA 总结 背景与前置知识 C#是一门流行的面向对象编程…

    other 2023年6月27日
    00
  • 分库分表实战及中间件

    分库分表是一种常见的数据库架构设计,它可以提高数据库的性能和可扩展性。在本文中,我们将提供一个完整的攻略,介绍如何实现分库分表,并使用中间件来简化代码。 步骤1:了解分库分表 分库分表是一种将数据分散到多个数据库或表中的技术。它可以提高数据库的性能和可扩展性,因为它可以将负载分散到多个服务器上。以下是一些常见的分库分表策略: 垂直分库:将不同的表分配到不同的…

    other 2023年5月8日
    00
  • C语言实现支持动态拓展和销毁的线程池

    让我们来详细讲解一下“C语言实现支持动态拓展和销毁的线程池”的完整攻略。 什么是线程池 线程池是一种线程管理技术,用来解决线程过多而导致系统负载过高的问题。在程序启动时,线程池会创建一定数量的线程,当有任务到达时,会将任务交给池中的线程执行。当所有线程都在工作时,新的任务就会进入等待队列,直到有线程完成任务后被唤醒。 实现线程池的步骤 初始化线程池 首先,我…

    other 2023年6月27日
    00
  • 如何创建电脑用户名 电脑用户名是什么怎么修改

    如何创建电脑用户名 首先,我们需要明确电脑用户名是用于登录计算机的身份标识。下面是创建电脑用户名的步骤: 1.打开计算机,进入桌面界面。2.点击左下角的“开始”按钮,在弹出的菜单中选择“设置”。3.在“设置”窗口中,点击“账户”。4.在“账户”页面中,选择“家庭和其他用户”下的“添加其他人”。5.在弹出的窗口中,选择“没有此人的帐户”。6.在下一个页面中,点…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部