当前位置: 代码迷 >> 综合 >> Spring Cloud Netflix 服务注册与发现—Eureka 配置详解
  详细解决方案

Spring Cloud Netflix 服务注册与发现—Eureka 配置详解

热度:86   发布时间:2024-02-02 11:53:06.0

任何一个框架都必须有相应的配置才能够使得一系列的功能生效,Spring Cloud也不例外,虽然Spring Boot的使用使得我们省去了很多繁琐的Bean配置,但是当我们使用一些特定的功能时,我们不得不做Bean的属性配置。Eureka Server也同样需要配置Bean的一些属性才能让功能正常使用。总得来说Eureka 注册中心有三类配置:一是Eureka实例配置,而是Eureka Server配置、三是Eureka Client配置。

Eureka Server 配置

Eureka Server的相关配置在spring-cloud-netflix-eureka-server-*包中,涉及到的类有InstanceRegistryPropertiesEurekaServerConfigBean下面是Eureka Server的一些常用配置解释。

InstanceRegistryProperties主要是跟实例注册相关的属性。它的前缀为eureka.instance.registry。它在该版本它有两个属性:

  1. expectedNumberOfRenewsPerMin 默认每分钟预期续约的次数,默认为1。将ExpectedNumberOfRenewsPerMin设置为非零,确保即便是一个独立的服务器。也可以将回收策略调整为注册数。(当它被设置为0的时候,即便注册成功,也不会重置InstanceRegistry.register()的速率阈值)
  2. defaultOpenForTrafficCount 用于确定何时取消续约的值,对于独立续约,默认为1。对于对等复制的Eurekas,应设置为0

EurekaServerConfigBean包含了Eureka Server的所有配置项,它的前缀为eureka.server。它包含了众多的属性值,虽然很多我们用不到,但是也需要了解一下,如下表示EurekaServerConfigBean包含的所有属性。

属性名称

默认值

说明

aWSAccessId

null

获取AWS访问ID。主要用于

弹性IP绑定。访问ID应提供绑定EIP的相应AWS权限。

aWSSecretKey

null

获取AWS密钥。主要用于

弹性IP绑定。访问ID应提供绑定EIP的相应AWS权限。

eIPBindRebindRetries

3

服务器尝试绑定到候选的EIP的次数,这些更改在运行时有效。

eIPBindingRetryIntervalMs

1*60000

服务器检查EIP绑定的时间间隔,单位为毫秒

eIPBindingRetryIntervalMsWhenUnbound

5*60000

服务器检查EIP绑定的时间间隔,仅仅是稳定状态检查,单位为毫秒

enableSelfPreservation

true

Eureka Server是否启用自我保护.启用后,服务器会跟踪更新的次数。它应该从服务器接收。任何时候,续约的次数都会减少低于由定义的阈值百分比.服务器关闭过期服务以避免危险。这将帮助服务器维护注册表客户端和服务器之间出现网络问题时的信息。

renewalPercentThreshold

0.85

客户端预期的最低续约百分比,如果续订低于阈值,则在以下情况下将禁用过期服务如果开启配置项:enableSelfPreservation

renewalThresholdUpdateIntervalMs

15*60000

阈值更新的时间间隔单位毫秒

peerEurekaNodesUpdateIntervalMs

10*60000

集群里eureka节点的变化信息更新的时间间隔,单位为毫秒

numberOfReplicationRetries

5

集群里服务器尝试复制数据的次数

peerEurekaStatusRefreshTimeIntervalMs

30*1000

Eureka 对等点状态刷新频率,单位毫秒

waitTimeInMsWhenSyncEmpty

5*60000

当从其他节点同步实例信息为空时等待的时间单位为毫秒

peerNodeConnectTimeoutMs

200

节点间连接超时时间,单位为毫秒

peerNodeReadTimeoutMs

200

节点间读取信息超时时间,单位为毫秒

peerNodeTotalConnections

1000

节点间连接总数

peerNodeTotalConnectionsPerHost

500

单个节点间连接总数

peerNodeConnectionIdleTimeoutSeconds

30

节点间连接空闲超时时间

retentionTimeInMSInDeltaQueue

3*60000

客户端保持增量信息缓存的时间,从而保证不会丢失这些信息

deltaRetentionTimerIntervalInMs

30*1000

清理增量队列中过期的频率

evictionIntervalTimerInMs

60*1000

过期实例应该启动并运行的时间间隔

aSGQueryTimeoutMs

300

AWS上ASG(自动缩放组)信息的超时值

aSGUpdateIntervalMs

5*60000

从AWS上更新ASG信息的时间间隔

aSGCacheExpiryTimeoutMs

10*60000

缓存ASG信息的到期时间

responseCacheAutoExpirationInSeconds

180

 当注册表信息被改变时,则其被保存在缓存中不失效的时间

responseCacheUpdateIntervalMs

30*1000

客户端的有效负载缓存应该更新的时间间隔

useReadOnlyResponseCache

true

目前采用的是二级缓存策略,一个是读写高速缓存过期策略,另一个没有过期只有只读缓存,默认为true,表示只读缓存

disableDelta

false

增量信息是否可以提供给客户端看

maxIdleThreadInMinutesAgeForStatusReplication

10

状态复制线程可以保持存活的空闲时间

minThreadsForStatusReplication

1

被用于状态复制的线程的最小数目

maxThreadsForStatusReplication

1

被用于状态复制的线程的最大数目

maxElementsInStatusReplicationPool

10000

 可允许的状态复制池备份复制事件的最大数量

syncWhenTimestampDiffers

true

当时间变化实例是否跟着同步

registrySyncRetries

5

当eureka服务器启动时尝试去获取集群里其他服务器上的注册信息的次数

registrySyncRetryWaitMs

30*1000

当eureka服务器启动时获取其他服务器的注册信息失败时,会再次尝试获取,期间需要等待的时间

maxElementsInPeerReplicationPool

10000

复制池备份复制事件的最大数量

maxIdleThreadAgeInMinutesForPeerReplication

15

复制线程可以保持存活的空闲时间

minThreadsForPeerReplication

5

将被用于复制线程的最小数目

maxThreadsForPeerReplication

10

将被用于复制线程的最大数目

maxTimeForReplication

3000

尝试在丢弃复制事件之前进行复制的时间

primeAwsReplicaConnections

true

是否应该准备集群中服务器节点的连接

disableDeltaForRemoteRegions

false

增量信息是否可以提供给客户端或一些远程地区

remoteRegionConnectTimeoutMs

1000

连接到对等远程地eureka节点的超时时间

remoteRegionReadTimeoutMs

1000

从远程地区eureka节点读取信息的超时时间

remoteRegionTotalConnections

1000

远程地区对等节点上http连接的总数

remoteRegionTotalConnectionsPerHost

500

远程地区特定的对等节点上http连接的总数

remoteRegionConnectionIdleTimeoutSeconds

30

http连接被清理之后远程地区服务器的空闲时间

gZipContentFromRemoteRegion

true

 eureka服务器中获取的内容是否在远程地区被压缩

remoteRegionUrlsWithName

Map<String, String>

针对远程地区发现的网址域名的Map

remoteRegionUrls

String[]

远程地区的URL列表

remoteRegionAppWhitelist

Map<String, Set<String>>

 通过远程区域中检索的应用程序的列表

remoteRegionRegistryFetchInterval

30

从远程区域取出该注册表的信息的时间间隔

remoteRegionFetchThreadPoolSize

30

用于执行远程区域注册表请求的线程池的大小

remoteRegionTrustStore

“”

用来合格请求远程区域注册表的信任存储文件

remoteRegionTrustStorePassword

"changeit"

获取偏远地区信任存储文件的密码

disableTransparentFallbackToOtherRegion

false

 如果在远程区域本地没有实例运行,对于应用程序回退的旧行为是否被禁用

batchReplication

false

表示集群节点之间的复制是否为了网络效率而进行批处理

rateLimiterEnabled

false

限流是否应启用或禁用

rateLimiterThrottleStandardClients

false

是否对标准客户端进行限流

rateLimiterPrivilegedClients

 

认证的客户端列表

rateLimiterBurstSize

10

速率限制的burst size

rateLimiterRegistryFetchAverageRate

500

速率限制器用的是Token算法,此配置指定平均执行注册请求速率

 

rateLimiterFullFetchAverageRate

100

速率限制器用的是Token算法,此配置指定平均执行注册请求速率

logIdentityHeaders

true

Eureka服务器是否应该登录clientAuthHeaders

listAutoScalingGroupsRoleName

"ListAutoScalingGroups"

 用来描述从AWS第三账户的自动缩放组中的角色名称

enableReplicatedRequestCompression

false

是否将请求数据进行压缩

jsonCodecName

null

编码器的类名称,如果没有设置默认的编解码器将使用全JSON编解码器,

xmlCodecName

null

编码器的类名称,如果没有设置默认的编解码器将使用xml编解码器

route53BindRebindRetries

3

服务器尝试绑定到候选Route53域的次数,默认为3

route53BindingRetryIntervalMs

5*60000

服务器应该检查是否和Route53域绑定的时间间隔

route53DomainTTL

301

 用于建立route53域的TTL

minAvailableInstancesForPeerReplication

-1


对等机最小可用实例

Eureka Client 配置

Eureka Client 配置类在spring-cloud-netflix-eureka-client-*.jar中,它主要包含两个配置类:EurekaClientConfigBeanEurekaInstanceConfigBean其中前一个表示Eureka实例的配置信息,后一个表示Eureka Client的配置信息。

配置项

默认值

说明

actuatorPrefix

"/actuator"

actuator端点的默认前缀

appname

“unknown”

注册到Eureka的应用程序的名称

appGroupName

null

注册到Eureka的应用程序组名称

instanceEnabledOnit

false

用于表明是否一旦注册到Eureka就允许通信,有时候在它能通信前需要一些预处理

nonSecurePort

80

实例接收通信的非安全端口

securePort

443

实例接收通信的安全端口

nonSecurePortEnabled

true

用于否启用非安全端口通信

securePortEnabled

false

用于是否启用安全端口通信

leaseRenewalIntervalInSeconds

30

Eureka客户端发送心跳的频率(秒)

leaseExpirationDurationInSeconds

90

eureka server收到最后一次心跳的等待时间,单位为秒。该值至少高于leaseRenewalIntervalInSeconds的值

virtualHostName

Unknown

实例定义的虚拟主机名称

instanceId

 

注册到Eureka的实例的唯一Id

secureVirtualHostName

Unknown

为此实例定义安全虚拟主机名

aSGName

 

与此实例关联的AWS自动缩放组名。

metadataMap

Map<String,String>

与实例相关的元数据对name/value

ipAddress

 

实例的IP地址

statusPageUrlPath

"/actuator/info"

实例的相对状态页URL路径

statusPageUrl

 

实例的绝对状态页URL路径

homePageUrlPath

“/”

实例的相对主页URL路径。

homePageUrl

 

此实例的绝对主页URL路径

healthCheckUrlPath

“/actuator/health”

实例的相对运行状况检查URL路径

healthCheckUrl

 

此实例的绝对运行状况检查页URL路径

secureHealthCheckUrl

 

实例的绝对安全健康检查页URL路径

hostname

 

主机名,可以在配置时确定(否则从操作系统原语推测)。

preferIpAddress

false

当猜测主机名时,服务器的IP地址应为用于引用操作系统报告的主机名。

EurekaInstanceConfigBean表示 Eureka Client的配置信息,也是我们最常用到的配置信息,如下表格为客户端配置:

配置项

默认值

说明

enabled

true

是否启用Eureka 客户端

registryFetchIntervalSeconds

30

Eureka Server获取注册信息的频率

instanceInfoReplicationIntervalSeconds

30

将实例更改复制到Eureka服务器的频率(秒)。

initialInstanceInfoReplicationIntervalSeconds

40

最初将实例信息复制到Eureka服务器的时间(秒)

eurekaServiceUrlPollIntervalSeconds

5*60*1000

轮询Eureka服务器信息更改的频率(秒)

proxyPort

null

Eureka server 的代理端口

proxyHost

null

Eureka server 的代理主机

proxyUserName

null

代理用户名

proxyPassword

null

代理密码

eurekaServerReadTimeoutSeconds

8

从Eureka服务器读取超市时间(秒)

eurekaServerConnectTimeoutSeconds

 

连接Eureka服务超时时间

backupRegistryImpl

 

BackupRegistry 实现的名称

eurekaServerTotalConnections

200

从Eureka客户端到所有Eureka服务器允许的连接总数

eurekaServerTotalConnectionsPerHost

50

从Eureka客户端到单个Eureka服务器主机允许的连接总数。

eurekaServerURLContext

 

用于构造与Eureka连接的服务URL的URL上下文

eurekaServerPort

 

用于构造服务URL的端口

eurekaServerDNSName

 

要查询以获取Eureka服务器列表的DNS名称。

region

"us-east-1"

此实例所在的区域(在AWS数据中心中使用)。

eurekaConnectionIdleTimeoutSeconds

30

到Eureka Server的HTTP连接关闭的空闲时间

registryRefreshSingleVipAddress

 

客户端是否只对单独VIP注册信息感兴趣

heartbeatExecutorThreadPoolSize

2

心跳线程池初始化大小

heartbeatExecutorExponentialBackOffBound

10

心跳执行器指数后退相关属性。它是重试延迟的最大乘数值,以防发生一系列超时。

cacheRefreshExecutorThreadPoolSize

2

cacheRefreshExecutor线程池初始化大小

cacheRefreshExecutorExponentialBackOffBound

10

缓存刷新执行器指数后退相关属性。它是最大值

在发生一系列超时的情况下,重试延迟的乘数值。

serviceUrl

Map<String, String>

可用性区域到与Eureka通信的完全限定URL列表的映射

服务器。每个值可以是单个URL,也可以是以逗号分隔的备选值列表位置。

gZipContent

true

是否必须压缩从Eureka服务器获取的内容

useDnsForFetchingServiceUrls

false

Eureka客户端是否应使用DNS机制获取要与之对话的Eureka服务器列表

registerWithEureka

true

是否注册到Eureka Server

preferSameZoneEureka

 

此实例是否因延迟或其他原因而尝试在同一区域中的Eureka服务器。

logDeltaDiff

 

是否在注册表信息方面记录Eureka服务器和Eureka客户端之间的差异。

fetchRemoteRegionsRegistry

 

获取Eureka注册表信息的区域的逗号分隔列表。

availabilityZones

Map<String, String>

实例所在区域的可用性区域列表(在AWS数据中心中使用)

filterOnlyUpInstances

true

在为仅具有InstanceStatus 为UP状态的实例筛选应用程序后是否获取应用程序。

fetchRegistry

true

是否从Eureka Server获取注册的服务

dollarReplacement

 

在Eureka服务器中序列化/反序列化信息的时候美元符号的替换字符串

escapeCharReplacement

 

在Eureka服务器中序列化/反序列化信息的时候下划线符号的替换字符串

allowRedirects

false

服务器可以再现客户请求的后台服务器/集群。如果设置为false,服务器将直接处理请求,如果设置为true可以向客户发送一个新的服务器位置。

onDemandUpdateStatusChange

true

如果设置为true,则通过ApplicationInfoManager进行的本地状态更新将触发远程Eureka服务器的按需(但速率有限)注册/更新。

encoderName

 

这是一个暂时的配置,一旦最新的编解码器稳定,就可以删除

decoderName

 

这是一个暂时的配置,一旦最新的编解码器稳定,就可以删除

shouldUnregisterOnShutdown

true

客户端关闭时,客户端是否应显式从远程服务器注销自身。

shouldEnforceRegistrationAtInit

false

客户端是否应在初始化期间强制注册

这里我们只是结合第一部分入门案例介绍Eureka 注册与发现中心用到的配置与说明,至于常用配置的使用则是在下一章节使用案例进行讲解。

  相关解决方案