SpringCloud--Eureka--配置
对于Eureka客户端的配置,主要分为两个部分:
服务注册相关配置:包括注册中心地址、服务获取间隔、可用区域等内容
服务实例相关配置:实例名称、IP地址、端口号、健康检查路径等
而对于Eureka服务端的配置,基本上不用怎么处理,类似于一个线程的产品(这些参数均以eureka.server开头)。
1、服务注册相关配置
全量配置可以参照org.springframework.cloud.netflix.eureka.EurekaClientConfigBean类的属性,该类配置均已eureka.client开头,下面是一些主要的配置信息
参数名 | 说明 | 默认值 |
private Map<String, String> serviceUrl | 注册中心地址 | |
private int registryFetchIntervalSeconds = 30; | 从Eureka服务端获取注册信息的时间间隔,单位:秒 | 30 |
private int instanceInfoReplicationIntervalSeconds = 30; | 更新实例信息变化到Eureka服务端的时间,单位:秒 | 30 |
private int eurekaServiceUrlPollIntervalSeconds = 5 * MINUTES | 轮询Eureka服务端地址更改的时间间隔,单为:秒;当我们与Spring Cloud Config配合,动态刷新Eureka的注册中心地址时,需要关注此参数 | 300 |
private int eurekaServerReadTimeoutSeconds = 8; | 读取Eureka server信息超时时间,单为:秒 | 8 |
private int eurekaServerConnectTimeoutSeconds = 5; | 连接Eureka server的超时时间,单为:秒 | 5 |
private int eurekaServerTotalConnections = 200; | 从Eureka客户端到所有Eureka服务端的连接总数 | 200 |
private int eurekaServerTotalConnectionsPerHost = 50; | 从Eureka客户端到一个Eureka服务端的连接总数 | 50 |
private int eurekaConnectionIdleTimeoutSeconds = 30; | Eureka服务端连接的空闲关闭时间,单为:秒 | 30 |
private int heartbeatExecutorThreadPoolSize = 2; | 心跳线程池的核心线程数 | 2 |
private int heartbeatExecutorExponentialBackOffBound = 10; | 心跳超时重试延迟时间的最大乘数 | 10 |
private int cacheRefreshExecutorThreadPoolSize = 2; | 缓存刷新线程池核心线程数 | 2 |
private int cacheRefreshExecutorExponentialBackOffBound = 10; | 缓存刷新超时重试延迟时间的最大乘数 | 10 |
private boolean useDnsForFetchingServiceUrls = false; | 使用DNS来获取Eureka服务端的serviceUrl | false |
private boolean registerWithEureka = true; | 自身是否注册到注册中心 | true |
private boolean preferSameZoneEureka = true; | 是否偏好使用同一zone的Eureka server | true |
private boolean filterOnlyUpInstances = true; | 获取实例时是否过滤,仅保留UP状态的实例 | true |
private boolean fetchRegistry = true; | 是否从注册中心获取注册信息 | true |
2、服务实例相关配置
全量配置可以参照org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean类的属性,该类配置均已eureka.instance开头。
(1)元数据
元数据是指Eureka客户端在向服务端发送注册请求时,用来描述客户端服务信息的对象。Eureka客户端的配置都是通过org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean配置并加载的,其中就包含元数据,而Eureka客户端真正发送请求时,则是使用的com.netflix.appinfo.InstanceInfo进行请求的,在该类中,详细定义了原生Eureka对元数据的定义,同时还有一个Map<String, String> metadata来表示自定义的元数据。
对于元数据原生属性的配置为eureka.instance.key = value,其中key为EurekaInstanceConfigBean中定义的属性,而自定义属性的配置为eureka.instance.metadata.key = value,其中key为自定义的属性,具体样例如下:
instance: hostname: lcl-pc2 # 心跳检测频率 lease-renewal-interval-in-seconds: 30 # 服务失效时间 lease-expiration-duration-in-seconds: 90 metadata-map: mykey: 12345
(2)实例名配置
实例名配置即InstanceInfo中的instanceId属性,在Eureka原生的配置中,该属性默认值是主机名,这就导致一个主机上只能运行一个Eureka服务实例,所以在Spring Cloud Eureka中,默认使用了 "主机名:项目名:实例id:端口号" 这样一组来作为最终的实例名
${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
在之前测试的时候,由于在本地,所以改了项目的端口号,因此实例名是不一样的,但是有的时候,我们不会固定写一个端口号,而是使用server.port=${random.int}来随机获取一个端口号,如果不想使实例名中的id与项目实际端口号保持一致,我们可以对instanceId做配置,样例如下:
eureka: instance: instance-id: ${spring.application.name}:${random.int} server: port: ${random.int[1111,9999]}
对客户端的两个项目重新按照此配置后,重新访问注册中心:http://localhost:1111/,可以发现,两个实例名是不一样的
(3)端点配置
在InstanceInfo中,存在一些url的配置信息,例如应用主页地址:homePageUrl、状态页地址:statusPageUrl、健康检查地址healthCheckUrl等,其中健康检查url和状态页url都是通过spring-boot-actuator模块提供的/health端点和/info端点来访问的。例如点击注册中心中已注册的实例,访问的就是actuator中的/indo端点。
开启这些端点,要做的就是在pom文件中引入actuator依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
-----------------------------------------------------------
---------------------------------------------
朦胧的夜 留笔~~