任何一个框架都必须有相应的配置才能够使得一系列的功能生效,Spring Cloud也不例外,虽然Spring Boot的使用使得我们省去了很多繁琐的Bean配置,但是当我们使用一些特定的功能时,我们不得不做Bean的属性配置。Eureka Server也同样需要配置Bean的一些属性才能让功能正常使用。总得来说Eureka 注册中心有三类配置:一是Eureka实例配置,而是Eureka Server配置、三是Eureka Client配置。
Eureka Server 配置
Eureka Server的相关配置在spring-cloud-netflix-eureka-server-*包中,涉及到的类有InstanceRegistryProperties,EurekaServerConfigBean。下面是Eureka Server的一些常用配置解释。
InstanceRegistryProperties主要是跟实例注册相关的属性。它的前缀为eureka.instance.registry。它在该版本它有两个属性:
- expectedNumberOfRenewsPerMin 默认每分钟预期续约的次数,默认为1。将ExpectedNumberOfRenewsPerMin设置为非零,确保即便是一个独立的服务器。也可以将回收策略调整为注册数。(当它被设置为0的时候,即便注册成功,也不会重置InstanceRegistry.register()的速率阈值)
- 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中,它主要包含两个配置类:EurekaClientConfigBean和EurekaInstanceConfigBean。其中前一个表示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 注册与发现中心用到的配置与说明,至于常用配置的使用则是在下一章节使用案例进行讲解。