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日

相关文章

  • MySql如何去除字符串前缀,两边,后缀

    MySql如何去除字符串前缀、两边和后缀 在MySQL中,可以使用内置的字符串函数来去除字符串的前缀、两边和后缀。下面是详细的攻略: 去除字符串前缀 要去除字符串的前缀,可以使用SUBSTRING()函数结合LENGTH()函数来实现。具体步骤如下: 使用SUBSTRING()函数截取字符串,指定起始位置为前缀的长度加1。 使用LENGTH()函数获取字符串…

    other 2023年8月6日
    00
  • C++中类的转换函数你了解吗

    当我们在C++中定义一个类时,有时需要将类的对象转换为另一个类型,或者将一个对象存储到另一个类型的对象中。这时候,我们可以使用类的转换函数来实现类的类型转换。 在C++中,类的转换函数是一种特殊的成员函数,用于将一个类的对象隐式或显式地转换为另一个类型的对象。转换函数的语法如下: operator target_type(){ //将当前对象转换为目标类型 …

    other 2023年6月26日
    00
  • php 错误处理经验分享

    PHP 错误处理经验分享 引言 在开发过程中,处理错误是一个非常重要的环节。良好的错误处理能够帮助我们快速定位和解决问题,提高代码的健壮性和稳定性。本文将分享一些关于 PHP 错误处理的经验和技巧。 错误处理原则 日志记录:对于发生的错误,要及时记录到日志中,以便后续排查和分析。 友好提示:给用户一个友好的错误提示信息,避免展示敏感信息或过于技术性的错误信息…

    other 2023年6月28日
    00
  • centos7.2基础安装和配置(含分区方案建议)

    CentOS7.2基础安装和配置(含分区方案建议) 本文将介绍在CentOS 7.2上进行基础安装和配置的步骤,以及分区方案建议。我们将使用图形化安装界面进行安装,同时还将介绍一些必要的安全措施和配置优化。 准备工作 在开始安装之前,我们需要准备一些必要的工具和文件: CentOS 7.2 ISO镜像文件 一张空白DVD或可启动的USB闪存盘 一台计算机 安…

    其他 2023年3月28日
    00
  • 手机内存空间里有个youmicache文件夹能删吗?youmicache文件夹是干什么用的?

    手机内存空间里的youmicache文件夹能删吗?youmicache文件夹是干什么用的? 你好!youmicache文件夹是一种用于存储应用程序缓存数据的文件夹。在Android系统中,许多应用程序会使用缓存来提高性能和加载速度。youmicache文件夹是其中一个常见的缓存文件夹之一。删除youmicache文件夹可能会有一些影响,但通常是安全的。 在大…

    other 2023年8月1日
    00
  • 未能添加对***.dll的引用问题解决方法

    以下是解决“未能添加对***.dll的引用问题”的完整攻略,包括以下步骤: 确认引用的DLL文件是否存在 检查DLL文件是否被占用 检查引用的DLL文件是否与项目的目标框架兼容 检查引用的DLL文件是否需要其他依赖项 清理和重建项目 示例说明 步骤一:确认引用的DLL文件是否存在 在解决“未能添加对***.dll的引用问题”之前,需要先确认引用的DLL文件是…

    other 2023年5月9日
    00
  • Android、iOS和Windows Phone中的推送技术详解

    Android、iOS和Windows Phone中的推送技术详解 什么是推送技术 推送技术是一种用于向移动设备推送消息和通知的技术。 通过推送技术,消息可以在后台发送到移动设备上的应用程序,而不需要用户手动打开应用程序以确认消息。 推送技术适用于广泛的移动应用程序,包括社交媒体,电子邮件,即时消息,天气,动态数据和其他基于位置的服务。 Android中的推…

    other 2023年6月27日
    00
  • MySQL学习笔记5:修改表(alter table)

    下面是MySQL学习笔记5的完整攻略,主要讲解如何使用ALTER TABLE命令修改表。 修改表(alter table) 1. 增加列 ALTER TABLE命令可以添加一个新列到现有表中。可以使用以下语法: ALTER TABLE table_name ADD column_name column_definition; 其中,table_name是要修…

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