进阶配置项说明

在对 Eureka 的原理机制进行更深一步了解之后,我们可能会想,根据服务治理机制做一些个性化的调整,这个时候,就需要使用 Eureka 的配置。原本在前面介绍的内容可能不满足需求,这里进行深一步的介绍。

根据分类原则,Eureka 的配置可以分为四个部分,服务注册类、服务实例类、服务注册中心、服务注册中心仪表盘。在这里不仅会列举配置项,也会说明如何通过源码查找配置项。

服务注册类的配置

如何查看服务注册类的信息的源码呢?首先,需要知道在哪个类中查找,这个类就是 org.springframework.cloud.netflix.eureka.EurekaClientConfigBean。看一下部分源码,如下。

@ConfigurationProperties(EurekaClientConfigBean.PREFIX)
public class EurekaClientConfigBean implements EurekaClientConfig, Ordered {
   public static final String PREFIX = "eureka.client";
   public static final String DEFAULT_URL = "http://localhost:8761" +DEFAULT_PREFIX
      + "/";
   public static final String DEFAULT_ZONE = "defaultZone";
   private static final int MINUTES = 60;
……
}

在上面的源码中,我们可以看到注解的 PREFIX 是 eureka.client,这里说明客户端的配置项都是以 eureka.client 开头。

在搭建服务注册中心时,我们写过服务注册中心地址的配置项。如何看源码怎么确定呢?先看看 serviceUrl 的定义,下面是源码。

private Map<String, String> serviceUrl = new HashMap<>();
{
   this.serviceUrl.put(DEFAULT_ZONE, DEFAULT_URL);
}

通过上面的源码可以知道 serviceUrl 是一个 Map 类型,然后 Map 中的 key 是 DEFAULT_ZONE,所以配置项的 key 也就出来了。

下面通过表格的方式,将源码中的所有配置项都列举出来,方便查阅,有兴趣的读者可以根据表10.2,查看源码。

epub 31473948 143
Figure 1. 表10.2 配置项配置

服务实例类的配置

对于服务实例类的信息,如何查看源码?首先需要知道在哪个类中查找,这个类就是 org.springframework.cloud.netflix.eureka. EurekaInstanceConfigBean。看一下部分源码。

@ConfigurationProperties("eureka.instance")
public class EurekaInstanceConfigBean implements CloudEurekaInstanceConfig, EnvironmentAware {
   private static final String UNKNOWN = "unknown";
   private HostInfo hostInfo;
   private InetUtils inetUtils;
……
}

通过上面的源码,可以知道所有的实例类的 PREFIX 都是 eureka.instance。

元数据信息

Eureka 的元数据主要分为两种类型,标准元数据和自定义元数据。其中标准元数据主要包括主机名、IP、端口号、状态页和健康检查等信息,这些信息直接注册到服务注册中心,以便客户端可以联系到服务。

所有的配置项通过 EurekaInstanceConfigBean 进行加载,但是在真正注册时则会包装成com.netflix.appinfo. InstanceInfo,然后发送给服务端。

自定义元数据时,使用 eureka.instance.metadataMap 的格式进行。在 EurekaInstanceConfigBean 中我们可以看下源码。

/**
  * Gets the metadata name/value pairs associated with this instance. This information
  * is sent to eureka server and can be used by other instances.
  */
private Map<String, String> metadataMap = new HashMap<>();

在上面源码中,可以知道这里的 metadataMap 使用的是 Map 类型。

其他的配置

具体的配置如表10.3所示。

epub 31473948 144
Figure 2. 表10.3 配置项配置

服务注册中心配置

对于服务注册中心的配置,如何查看源码呢?首先需要知道在哪个类中查找,这个类就是 org.springframework.cloud.netflix.eureka.EurekaServerConfigBean。看一下部分源码。

@ConfigurationProperties(EurekaServerConfigBean.PREFIX)
public class EurekaServerConfigBean implements EurekaServerConfig {
   public static final String PREFIX = "eureka.server";
   private static final int MINUTES = 60 * 1000;
   @Autowired(required = false)
   PropertyResolver propertyResolver;
……
}

所有服务注册中心的配置项都是以 eureka.server 开头。这里的配置项特别多,建议读者直接看源码。为了说明服务注册中心的配置,这里只列举几个配置项做一些说明。

//开启自我保护
rivate boolean enableSelfPreservation = true;
//自我保护续约百分百
private double renewalPercentThreshold = 0.85;
//续约数阈值更新频率
private int renewalThresholdUpdateIntervalMs = 15 * MINUTES;

服务注册中心仪表盘配置

服务注册中心的仪表盘用于服务注册中心的可视化展示,同上面的几个配置一样,在这里也存在单独的源码,org.springframework.cloud.netflix.eureka.server.EurekaDashboardProperties 部分源码如下。

@ConfigurationProperties("eureka.dashboard")
public class EurekaDashboardProperties {
   /**
      * The path to the Eureka dashboard (relative to the servlet path). Defaults to "/".
      */
   private String path = "/";
……
}

通过源码可以知道,配置项以 eureka.dashboard 开头。配置项如表10.4所示。

image 2024 04 01 08 28 36 145
Figure 3. 表10.4 配置项配置