概述
eureka.client.registryFetchIntervalSeconds
(默认值:30),eureka client每隔多少秒从eureka server获取最新的已注册的实例信息,实例信息会缓存在eureka clienteureka.client.eurekaServiceUrlPollIntervalSeconds
(默认值:5*60),eureka client每隔多少秒动态更新eureka server的信息,比如动态删除或新增eureka server的url,执行此任务的时候日志中会打印:Resolving eureka endpoints via configurationribbon.serverListRefreshInterval
(默认值:30000,单位:毫秒),ribbon缓存服务器实例的时间,ribbon缓存数据来源于eureka client缓存,如果用了ribbon,想缩短客户端的缓存时间,除了修改eureka.client.registryFetchIntervalSeconds参数,还要修改ribbon.serverListRefreshInterval参数
spring.cloud.client.hostname
,设置client的主机名,如果没有设置,spring会自动设置为本机的主机名spring.cloud.client.ipAddress
,设置client的ip地址,如果没有设置,spring会自动设置为第一个非回环IP地址,详情参见:org.springframework.cloud.client.HostInfoEnvironmentPostProcessor.postProcessEnvironment()
eureka.instance.hostname
,设置当前eureka实例的hostname,如果没有设置,当前eureka实例的hostname将会自动获取本机的主机名eureka.instance.ipAddress
,设置当前eureka实例的IP地址,如果没有设置,当前eureka实例的IP地址将会自动获取本机的第一个非回环IP地址eureka.instance.preferIpAddress
(默认值:false),如果设置为true,当前eureka实例的hostname将会使用当前eureka实例的IP地址,详情参见:org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration.eurekaInstanceConfigBean()、org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean.getHostName()、org.springframework.cloud.netflix.eureka.InstanceInfoFactory.create()eureka.instance.leaseRenewalIntervalInSeconds
(默认值:30),eureka client每隔多少秒向eureka server发送一次心跳,此参数不建议修改,应保持默认值,因为eureka server计算numberOfRenewsPerMinThreshold时硬编码为按eureka client默认值每30秒发送心跳来计算的,每个实例每分钟2次心跳eureka.instance.leaseExpirationDurationInSeconds
(默认值:90),eureka server自从收到最后一次心跳到移除此实例的等待时间,此参数应设置为大于leaseRenewalIntervalInSeconds
eureka.server.evictionIntervalTimerInMs
(默认值:60 * 1000),eureka server每隔多少毫秒执行移除过期实例的任务(如果isLeaseExpirationEnabled()为false,则忽略此移除过期实例的任务,判断实例过期的条件为:当前时间>最后一次收到心跳的时间+leaseExpirationDurationInSeconds),详情参见:com.netflix.eureka.registry.AbstractInstanceRegistry.postInit()和com.netflix.eureka.registry.AbstractInstanceRegistry$EvictionTask.run()eureka.server.renewalPercentThreshold
(默认值:0.85),续租的百分比阈值,用于计算numberOfRenewsPerMinThreshold(也就是Eureka dashboard上的Renews threshold,表示每分钟收到所有实例的心跳数的阈值,在开启自我保护模式的情况下,最后一分钟收到所有实例的心跳数小于等于此阈值将会进入自我保护模式,不再删除过期的实例),eureka server已经硬编码为按每个实例每30秒发送一次心跳计算,numberOfRenewsPerMinThreshold=(int)(expectedNumberOfRenewsPerMinrenewalPercentThreshold),其中expectedNumberOfRenewsPerMin初始值为eureka.server.expectedNumberOfRenewsPerMin(默认值:1),double强转成int型,小数点会被舍弃,eureka server初始化时会从其他eureka server节点同步实例到本地(eureka.client.registerWithEureka=false除外),如果本地的实例数为0,则expectedNumberOfRenewsPerMin设置为2eureka.server.defaultOpenForTrafficCount(默认值:1),如果获取的实例数不为0,则expectedNumberOfRenewsPerMin设置为2*实例数,详情参见:org.springframework.cloud.netflix.eureka.server.InstanceRegistry.openForTraffic(),之后如果有实例注册,则expectedNumberOfRenewsPerMin=expectedNumberOfRenewsPerMin+2,如果有实例注销,则expectedNumberOfRenewsPerMin=expectedNumberOfRenewsPerMin-2。expectedNumberOfRenewsPerMin和numberOfRenewsPerMinThreshold会在eureka server初始化、定时任务、注册实例、删除实例这4种情况更新。详情参见:com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl类的isLeaseExpirationEnabled()、updateRenewalThreshold()、syncUp()、openForTraffic()、scheduleRenewalThresholdUpdateTask()、register()、cancel()方法。eureka.server.renewalThresholdUpdateIntervalMs
(默认值:15601000),eureka server每隔多少毫秒执行更新expectedNumberOfRenewsPerMin和numberOfRenewsPerMinThreshold的任务。eureka.server.enableSelfPreservation
(默认值:true),eureka server是否开启自我保护模式,如果Eureka Server在leaseExpirationDurationInSeconds(默认90秒)时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在最后一分钟收到的所有实例的心跳数小于等于numberOfRenewsPerMinThreshold(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
如果eureka server采用单节点模式(eureka.client.registerWithEureka=false
),则expectedNumberOfRenewsPerMin因为defaultOpenForTrafficCount的原因永远会比所有实例的心跳总数大2,numberOfRenewsPerMinThreshold如果按默认的renewalPercentThreshold=0.85计算也会大于所有实例的心跳总数,这样会导致eureka server永远是自我保护状态,过期实例永远不会删除,解决办法有2个:
1、设置eureka.server.enableSelfPreservation=false
,关闭自我保护机制
2、设置eureka.server.renewalPercentThreshold=0.49
,这样numberOfRenewsPerMinThreshold就会相当较小,比所有实例的心跳总数要小一些
eureka server在与其他eureka server节点(eureka.client.serviceUrl.defaultZone)同步数据时,会排除与当前eureka实例的hostname(eureka.instance.preferIpAddress=true
时,hostname=当前eureka实例的IP地址)相同的节点,不会判断port,只要是hostname相同,不管port是否相同,则认为是自己本节点,也就不会同步数据到此eureka server上,目的是防止同步数据到本节点,从而产生重复数据。但是,如果eureka.client.registerWithEureka=true
的情况下,当前eureka server仍然会以eureka client的身份注册到hostname相同的eureka server节点上,因为eureka client和eureka server的hostname不管是否相同,eureka client都会向eureka server注册。如果需要在同一个节点上部署多个eureka server,则需要保证当前eureka实例的hostname与eureka.client.serviceUrl.defaultZone中的hostname不同,详情参见:com.netflix.eureka.cluster.PeerEurekaNodes.resolvePeerUrls()
和updatePeerEurekaNodes()
、com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl.replicateToPeers()
是用来清理过期客户端的任务类 serverConfig.getEvictionIntervalTimerInMs
Running the evict task with compensationTime 3ms 获取延迟秒数
Current renewal threshold is : 6 // 15分钟后更新续约阈值,之后每隔15分分钟执行一次
// 获取延迟秒数
// 获取延迟秒数
// 获取延迟秒数
最后
以上就是年轻小蝴蝶为你收集整理的Spring Cloud Eureka参数详解的全部内容,希望文章能够帮你解决Spring Cloud Eureka参数详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复