当前位置: 首页 > article >正文

探究 Eureka 在 Spring Boot 中的配置注入与统一管理机制(下)——第五节

今天我们探讨已经加载到Spring容器中的EurekaClientAutoConfiguration自动配置类是如何进行初始化的。

该值得一提的是,本小节也是Eureka 在 Spring Boot 中的配置注入与统一管理机制系列的收官之节。

EurekaClientAutoConfiguration
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties
@ConditionalOnClass(EurekaClientConfig.class)
@ConditionalOnProperty(value = "eureka.client.enabled", matchIfMissing = true)
@ConditionalOnDiscoveryEnabled
@AutoConfigureBefore({ NoopDiscoveryClientAutoConfiguration.class,
		CommonsClientAutoConfiguration.class, ServiceRegistryAutoConfiguration.class })
@AutoConfigureAfter(name = {
		"org.springframework.cloud.netflix.eureka.config.DiscoveryClientOptionalArgsConfiguration",
		"org.springframework.cloud.autoconfigure.RefreshAutoConfiguration",
		"org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration",
		"org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration" })
public class EurekaClientAutoConfiguration {
    ……
}

 该配置类用在 Spring Cloud 环境中为 Eureka 客户端提供自动配置。它确保在满足特定条件时,被加载到spring容器中,然后初始化时会创建Eureka 客户端所需的各种bean,包括配置属性、服务注册、健康检查等,以实现与 Eureka 服务注册中心的交互。

1. eurekaFeature()方法

    @Bean
	public HasFeatures eurekaFeature() {
		return HasFeatures.namedFeature("Eureka Client", EurekaClient.class);
	}

创建HasFeatures类型的 Bean,用于表示application具有 Eureka 客户端的功能特征。

2.eurekaClientConfigBean(ConfigurableEnvironment env)方法

    @Bean
	@ConditionalOnMissingBean(value = EurekaClientConfig.class,
			search = SearchStrategy.CURRENT)
	public EurekaClientConfigBean eurekaClientConfigBean(ConfigurableEnvironment env) {
		return new EurekaClientConfigBean();
	}

当类路径中不存在EurekaClientConfig类型的 Bean,则创建。这个 Bean 用于配置 Eureka 客户端的通用属性。

3. serviceManagementMetadataProvider()方法

    @Bean
	@ConditionalOnMissingBean
	public ManagementMetadataProvider serviceManagementMetadataProvider() {
		return new DefaultManagementMetadataProvider();
	}

创建ManagementMetadataProvider类型的bean。用于提供服务管理的元数据信息,如

  • 健康检查 URL:http://192.168.1.188/health
  • 服务主页:http://192.168.1.188/home
  • 服务状态页:http://192.168.1.188/status

4. eurekaInstanceConfigBean(InetUtils inetUtils, ManagementMetadataProvider managementMetadataProvider)方法

    @Bean
	@ConditionalOnMissingBean(value = EurekaInstanceConfig.class,
			search = SearchStrategy.CURRENT)
	public EurekaInstanceConfigBean eurekaInstanceConfigBean(InetUtils inetUtils,
			ManagementMetadataProvider managementMetadataProvider) {
		String hostname = getProperty("eureka.instance.hostname");
		boolean preferIpAddress = Boolean
				.parseBoolean(getProperty("eureka.instance.prefer-ip-address"));
		String ipAddress = getProperty("eureka.instance.ip-address");
		boolean isSecurePortEnabled = Boolean
				.parseBoolean(getProperty("eureka.instance.secure-port-enabled"));

		String serverContextPath = env.getProperty("server.servlet.context-path", "/");
		int serverPort = Integer.parseInt(
				env.getProperty("server.port", env.getProperty("port", "8080")));

		Integer managementPort = env.getProperty("management.server.port", Integer.class);
		String managementContextPath = env
				.getProperty("management.server.servlet.context-path");
		Integer jmxPort = env.getProperty("com.sun.management.jmxremote.port",
				Integer.class);
        ……
    }

创建EurekaInstanceConfigBean类型的bean,用于配置 Eureka 客户端实例的属性,包括从环境变量中读取各种配置信息并设置实例的状态页 URL、健康检查 URL 等信息

5. eurekaServiceRegistry()方法

    @Bean
	public EurekaServiceRegistry eurekaServiceRegistry() {
		return new EurekaServiceRegistry();
	}

创建EurekaServiceRegistry类型的bean,用于服务注册相关的操作。

      if (log.isInfoEnabled()) {
				log.info("Unregistering application "
						+ reg.getApplicationInfoManager().getInfo().getAppName()
      }

6. eurekaAutoServiceRegistration(ApplicationContext context, EurekaServiceRegistry registry, EurekaRegistration registration)方法

    @Bean
	@ConditionalOnBean(AutoServiceRegistrationProperties.class)
	@ConditionalOnProperty(
			value = "spring.cloud.service-registry.auto-registration.enabled",
			matchIfMissing = true)
	public EurekaAutoServiceRegistration eurekaAutoServiceRegistration(
			ApplicationContext context, EurekaServiceRegistry registry,
			EurekaRegistration registration) {
		return new EurekaAutoServiceRegistration(context, registry, registration);
	}

创建EurekaAutoServiceRegistration类型的bean,用于自动进行服务注册和管理。

7. EurekaClientConfiguration和RefreshableEurekaClientConfiguration内部类

    @Configuration(proxyBeanMethods = false)
	@ConditionalOnMissingRefreshScope
	protected static class EurekaClientConfiguration {
        ……
    }

    @Configuration(proxyBeanMethods = false)
	@ConditionalOnRefreshScope
	protected static class RefreshableEurekaClientConfiguration {
        ……
    }

这两个内部类的生效条件刚好是相反的。前者用于在没有刷新作用域的情况下配置 Eureka 客户端相关的 Bean,包括EurekaClientApplicationInfoManager和EurekaRegistration。后者用于在存在刷新作用域的情况下为 Eureka 客户端提供可刷新的配置,当应用的配置发生变化时,这些 Bean 可以根据新的配置进行更新。

8. EurekaHealthIndicatorConfiguration内部类

当类路径中存在Health类时,配置生效,同时创建EurekaHealthIndicator类型的bean,用于提供Eureka客户端的健康检测,具体的实现思路可参考心跳机制大揭秘:Redis、数据库与 PING 命令的多面演绎icon-default.png?t=N7T8https://blog.csdn.net/weixin_45593273/article/details/141611860?spm=1001.2014.3001.5501

至此,EurekaClientAutoConfiguration自动配置类完成了初始化。


http://www.kler.cn/a/290847.html

相关文章:

  • springBoot Maven 剔除无用的jar引用
  • 【087】基于51单片机智能宠物喂食器【Proteus仿真+Keil程序+报告+原理图】
  • 运维工程师面试系统监控与优化自动化与脚本云计算的理解虚拟化技术的优点和缺点
  • 封装(2)
  • 车载网关性能 --- GW ECU报文(message)处理机制的技术解析
  • 5G学习笔记之Non-Public Network
  • guava中对Map的扩展数据结构
  • Vue输入框模糊搜索的多种写法
  • Docker中的容器内部无法使用vi命令怎么办?
  • MySQL自动安装脚本8.0和5.0均可
  • SD-WAN组网:定义与部署步骤解析
  • AI绘画SD中如何安装/更新/卸载 Stable Diffusion WebUI 插件?SD新手必看的保姆级教程!
  • 使用 Cloudflare R2 代替 AWS S3……
  • Day15_0.1基础学习MATLAB学习小技巧总结(15)——字符矩阵
  • Python批量分割Excel后逐行做差、合并文件的方法
  • Redisson的几种锁的通俗说明
  • Go语言多态实践以及gin框架c.BindJSON序列化遇到的坑
  • C#数组中的Rank,GetUpperBound(), GetLength()
  • linux find 之 执行
  • GIT 下载安装使用教程
  • 小程序中用于跳转页面的5个api是什么?区别是什么
  • 【计算机网络】TCP协议
  • 【深度学习】向量化
  • 第 22 章 JavaScript DOM 元素尺寸和位置
  • Hadoop vs Spark
  • fpga图像处理实战-均值滤波