5、Spring Cloud Eureka常用参数

一、Eureka Client常用参数
下面整理了 org.springframework.cloud.netflix.eureka.EurekaClientConfigBean 中定义的常用配置参数以及对应的说明和默认值,这些参数均以 eureka.client 为前缀

参数名
说明
默认参数
enable
启用Eureka客户端
true
registryFetchIntervalSeconds
从Eureka服务端获取注册信息的间隔时间,单位为秒
30
instanceInfoReplicationIntervalSeconds
更新实例信息的变化到Eureka服务端的间隔时间,单位为秒
30
initialInstanceInfoReplicationIntervalSeconds
初始化实例信息到Eureka服务端的间隔时间,单位为秒
40
eurekaServiceUrlPollIntervalSeconds
轮询Eureka服务端地址更改的间隔时间,单位为秒。当我们与SpringCloud Config配合,动态刷新Eureka 的 ServiceURL地址时需要关注该参数
300
eurekaServerReadTimeoutSeconds
读取Eureka Server信息的超时时间,单位秒
8
eurekaServerConnectTimeoutSeconds
连接eureka Server的超时时间,单位为秒
5
eurekaServerTotalConnections
从eureka客户端到 所有eureka服务端的连接总数( eureka客户端允许所有eureka服务器连接的总数目
200
eurekaServerTotalConnectionsPerHost
从Eureka客户端到 每个Eureka服务端主机的连接总数
50
eurekaConnectionIdleTimeout Seconds
Eureka服务端连接的空闲关闭时间,单位为秒
30
HeartbeatExecutorThreadPoolSize
心跳连接池的初始化线程数
2
HeartbeatExecutorExponentialBackOffBound
心跳超时重试延迟时间的最大乘数值
10
cacheRefreshExecutorThreadPoolSize
缓存刷新线程池的初始化线程数
2
cacheRefreshExecutorExponentialBackOffBound
缓存刷新重试延迟时间的最大乘数值
10
useDnsForFetchingServiceUrls
使用DNS来获取Eureka服务端的ServiceUrl
false
registerWhitEureka
是否要将自身的实例信息注册到Eureka服务端
true
preferSameZoneEureka
是否偏好使用处于相同Zone的Eureka服务端
true
filterOnlyUpInstances
获取实例时是否过滤,仅保留UP状态的实例
true
fetchRegistry
是否从eureka服务端获取注册信息
true
region
设置地区
us-east-1
availability-zones
设置地带(一个 region可以有多个zone
defaultZone
service-url
设置eureka注册连接
注意:我重新构建了一个Spring Cloud工程,具体代码可以到:https://pan.baidu.com/s/1kWBeY8n 下载

二、服务实例类配置
关于服务实例类的配置,我们可以通过查看  org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean  的源码获取详细内容,这些配置都是以 eureka.instance 为前缀。下面我们针对一些常用配置信息做一些详细的说明。
元数据:
org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean 的配置信息中,有一大部分内容都是对服务实例元数据的配置,那么什么是元数据呢?他是eureka客户端在向服务注册中心发送注册请求时,用来描述自身服务信息的对象,其中包含了一些标准化的元数据,比如:服务名、实例名、实例IP、实例端口等用于服务治理的重要信息。以及一些用于负载均衡策略或是其他特殊用途的自定义元数据信息。
在使用SpringCloud Eureka的时候,所有的配置信息都是通过 org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean 进行配置加载,但在真正进行服务注册的时候,还是会包装成 com.netflix.appinfo.InstanceInfo 对象发送给Eureka服务端。这两个类的定义非常的相似,我们可以查看 com.netflix.appinfo.InstanceInfo 类来了解原生eureka对元数据的定义。其中 private volatile Map<String, String> metadata = new ConcurrentHashMap<String, String>()( com.netflix.appinfo.InstanceInfo 里) 是自定义的元数据信息,其他成员变量是标准化的元数据信息。Spring Cloud的 EurekaInstanceConfigBean 对原生数据对象做了一些配置优化处理,在后续中,我们会介绍!
通过eureka.instance.<properties>=<value>的格式对标准元数据直接进行配置,properties就是EurekaInstanceConfigBean对象中的成员变量名。而对于自定义元数据,可以通过 eureka.instance.metadataMap.<key>=<value>的格式来进行配置,比如(我们使用yml):


实例名配置:
实例名,即InstanceInfo中的InstanceId参数,他是区分同一个服务中不同实例的唯一标识。在Netflix Eureka的原生实现中,实例名采用主机名作为默认值,这样的设置无法使得在同一主机上启动多个相同的服务实例。所以在Spring Cloud Eureka的配置中,针对同一主机启动多个实例的情况,对实例名的默认命名做了更合理的扩展,他采用了如下默认规则:
${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
对于实例名的命名规则,我们可以通过 eureka.instance.instance-id 参数来进行配置。我们这里配置的就是 IP:PORT


端点配置:
InstanceInfo中,我们可以看见一些URL的配置信息,比如homePageUrl,statusPageUrl、healthCheckUrl,他们分别代表了应用主页的URL、状态页的URL、健康检查的URL。其中状态页和健康检查的URL在Spring Cloud Eureka中默认使用了spring-boot-actuator模块提供的 /info 端点和 /health 端点。虽然我们之前并没有对这些端点做具体的设置,但是实际上这些URL地址的配置非常重要。为了服务的正常运作,我们必须确保Eureka客户端的 /health 端点在发送元数据的时候,是一个能够被注册中心访问到的地址,否则注册中心不会根据应用的健康检查来更改状态(仅当开启了 healthcheck 功能时,以该端点信息作为健康检查标准)。而 /info 端点如果不正确的话,会导致在Eureka面板中单击服务实例时,无法访问到服务提供的信息接口。
大多数情况下,我们并不需要修改这几个URL的配置,但是在一些特殊情况下,比如为应用设置了 context-path ,这时,所有的 spring-boot-actuator 模块的监控端点都会增加一个前缀。所以,我们就需要做类似如下的配置,为 /info 和 /health 端点也加上类型的前缀信息:

management.context-path 是 org.springframework.boot.actuate.autoconfigure.ManagementServerProperties 里面的属性
eureka.instance.status-page-url-path=${management.context-path}/info
eureka.instance.health-check-url-path=${management.context-path}/health
另外,有时候为了安全考虑,也可能会修改 /info 和 /health 端点的原始路径。这个时候,我们也需要一些特殊的配置:

在上面的两个示例中,我们使用了  eureka.instance.status-page-url-path  eureka.instance.health-check-url-path 来配置端点路径,这两个配置都有一个共同的特点,他们都是使用相对路径来进行配置,由于eureka的服务注册中心会默认以 HTTP 的方式来访问和暴露这些端点,因此当客户端以 HTTPS 的方式来暴露服务的监控端点时,相对路径的配置方式就无法满足需求了。所以Spring Cloud Eureka 还提供了绝对路径的配置参数

健康检查:
心跳机制的缺点
默认情况下,Eureka中各个服务实例的健康检查并不是通过 spring-boot-actuator 模块的 /health 端点来实现的,而是依靠客户端心跳的方式来保持服务实例的存活。在Eureka的服务续约与剔除机制下,客户端的健康状态从注册到注册中心开始都会处于 UP 状态,除非心跳终止一段时间之后,服务注册中心将其剔除。默认的心跳 实现 方式可以有效检查客户端进程是否正常运作,但却无法保证客户端应用能够正常提供服务。由于大多数微服务应用都会有一些其他的外部资源依赖,比如:数据库、缓存、消息代理等,如果我们的应用无法与这些资源联通的时候,实际上已经不能正常的提供服务了,但是客户端的心跳依然在运行,所有他还是会被消费者调用,而这样的调用实际上并不能获得预期的结果。
解决方案
Spring Cloud Eureka中,我们可以通过简单的配置,把Eureka客户端的健康检查交给 spring-boot-actuator 模块的 /health 端点,以实现更加全面的健康维护。
详细步骤如下:
  • Eureka Client pom.xml 中引入 spring-boot-starter-actuator 模块的依赖。
  • 在 application.yml 或者 application.properties 中增加参数 eureka.client.healthcheck.enabled = true(注意:该配置IDE不会进行提示)
  • 如果客户端的 /health 端点路径做了一些特殊的处理,请参考前面介绍端点配置时的方法配置,让服务注册中心可以正确访问到健康检测端点。




注意:CQ 和 CY 是我们自定义的 Region 和 Zone,
http://${security.user.name}:${security.user.password}@localhost:${server.port}/eureka/ 如果不理解,请参考
4、Eureka详解 那一章中的【注册中心的安全机制】! 再次申明:eureka.client.healthcheck 属性是没有提示功能的

三、其他配置
除了上面介绍的参数外,下面整理了一些 org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean 中定义的配置参数以及对应的说明和默认值,这些参数以 eureka.instance 为前缀。

参数名
说明
默认值
preferIpAddress
是否优先使用IP地址作为主机名的标识(等下我会解释这个参数影响了什么)
false
leaseRenewalIntervalInSeconds
Eureka客户端向服务端发送心跳的时间间隔
30
leaseExpirationDurationInSeconds
Eureka 服务端在收到最后一次心跳之后等待的时间上限(就是下一次心跳的时间间隔),单位为秒。超过该时间之后服务端会将该服务实例从服务清单中剔除,从而禁止服务消费者的请求发送到该实例上
90
nonSecurePort
非安全的通信端口号
80
nonSecurePortEnabled
是否开启非安全的通信端口号
true
securePort
安全的通信端口号
443
securePortEnabled
是否启用安全的通信端口号

appname
服务名,默认取 spring.application.name 的配置值,如果没有则为 unknown

hostname
主机名,不配置的时候将根据操作系统的主机名来获取


在上面的配置中,一般我们只会关注前面3个配置选项,其他的参数使用默认值即可。nonSecurePortEnabled 和 securePortEnabled 我猜测应该是启用 HTTP 或者 HTTPS 通信的配置,我未验证,请读者自行验证!

以下摘抄于百度网:
注册安全应用程序
如果您的应用程序想通过HTTPS联系,则可以分别在EurekaInstanceConfig,即 eureka.instance.[nonSecurePortEnabled,securePortEnabled]=[false,true] 中设置两个标志。这将使Eureka发布实例信息显示安全通信的明确偏好。Spring Cloud DiscoveryClient将始终为以这种方式配置的服务返回一个https://…; URI,并且Eureka(本机)实例信息将具有安全的健康检查URL。
由于Eureka内部的工作方式,它仍然会发布状态和主页的非安全网址,除非您也明确地覆盖。您可以使用占位符来配置eureka实例URL,例如
application.yml
eureka:
  instance:
    statusPageUrl: https://${eureka.hostname}/info
    healthCheckUrl: https://${eureka.hostname}/health
    homePageUrl: https://${eureka.hostname}/
(请注意,${eureka.hostname}是仅在稍后版本的Eureka中可用的本地占位符,您也可以使用Spring占位符实现同样的功能,例如使用${eureka.instance.hostName}。
注意: 如果您的应用程序在代理服务器后面运行,并且SSL终止服务在代理中(例如,如果您运行在Cloud Foundry或其他平台作为服务),则需要确保代理“转发”头部被截取并处理应用程序。Spring Boot应用程序中的嵌入式Tomcat容器会自动执行“X-Forwarded - *”标头的显式配置。你这个错误的一个迹象就是你的应用程序本身所呈现的链接是错误的(错误的主机,端口或协议)。





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值