Spring Cloud中,Eureka常见问题总结

 2019-11-23 11:11  阅读(1621)
文章分类:Spring Cloud

Spring Cloud中,Eureka常见问题总结。 ## 指定Eureka的Environment ## | ``````1|``````eureka.environment:指定环境| | :-----: | :-----: | | ``````1 | ``````eureka.environment:指定环境 | 参考文档:[https://github.com/Netflix/eureka/wiki/Configuring-Eureka][https_github.com_Netflix_eureka_wiki_Configuring-Eureka] ## 指定Eureka的DataCenter ## | ``````1|``````eureka.datacenter:指定数据中心| | :-----: | :-----: | | ``````1 | ``````eureka.datacenter:指定数据中心 | 参考文档:[https://github.com/Netflix/eureka/wiki/Configuring-Eureka][https_github.com_Netflix_eureka_wiki_Configuring-Eureka] 文中指出,配置-Deureka.datacenter=cloud,这样eureka将会知道是在AWS云上。 ## 如何解决Eureka注册服务慢的问题 ## 使用配置项: | ``````1|``````eureka.instance.leaseRenewalIntervalInSeconds| | :-----: | :-----: | | ``````1 | ``````eureka.instance.leaseRenewalIntervalInSeconds | 参考文档: [http://cloud.spring.io/spring-cloud-static/Camden.SR1/\#\_why\_is\_it\_so\_slow\_to\_register\_a\_service][http_cloud.spring.io_spring-cloud-static_Camden.SR1_why_is_it_so_slow_to_register_a_service] 原文: | ``````123|``````WhyisitsoSlowtoRegisteraService?Beinganinstancealsoinvolvesaperiodicheartbeattotheregistry(viatheclient’sserviceUrl)withdefaultduration30seconds.Aserviceisnotavailablefordiscoverybyclientsuntiltheinstance,theserverandtheclientallhavethesamemetadataintheirlocalcache(soitcouldtake3heartbeats).Youcanchangetheperiodusingeureka.instance.leaseRenewalIntervalInSecondsandthiswillspeeduptheprocessofgettingclientsconnectedtootherservices.Inproductionit’sprobablybettertostickwiththedefaultbecausetherearesomecomputationsinternallyintheserverthatmakeassumptionsabouttheleaserenewalperiod.| | :-----: | :-----: | | ``````123 | ``````WhyisitsoSlowtoRegisteraService?Beinganinstancealsoinvolvesaperiodicheartbeattotheregistry(viatheclient’sserviceUrl)withdefaultduration30seconds.Aserviceisnotavailablefordiscoverybyclientsuntiltheinstance,theserverandtheclientallhavethesamemetadataintheirlocalcache(soitcouldtake3heartbeats).Youcanchangetheperiodusingeureka.instance.leaseRenewalIntervalInSecondsandthiswillspeeduptheprocessofgettingclientsconnectedtootherservices.Inproductionit’sprobablybettertostickwiththedefaultbecausetherearesomecomputationsinternallyintheserverthatmakeassumptionsabouttheleaserenewalperiod. | 翻译: | ``````1|``````作为实例还涉及到与注册中心的周期性心跳,默认持续时间为30秒(通过serviceUrl)。在实例、服务器、客户端都在本地缓存中具有相同的元数据之前,服务不可用于客户端发现(所以可能需要3次心跳)。你可以使用eureka.instance.leaseRenewalIntervalInSeconds配置,这将加快客户端连接到其他服务的过程。在生产中,最好坚持使用默认值,因为在服务器内部有一些计算,他们对续约做出假设。| | :-----: | :-----: | | ``````1 | ``````作为实例还涉及到与注册中心的周期性心跳,默认持续时间为30秒(通过serviceUrl)。在实例、服务器、客户端都在本地缓存中具有相同的元数据之前,服务不可用于客户端发现(所以可能需要3次心跳)。你可以使用eureka.instance.leaseRenewalIntervalInSeconds配置,这将加快客户端连接到其他服务的过程。在生产中,最好坚持使用默认值,因为在服务器内部有一些计算,他们对续约做出假设。 | ## Eureka的自我保护模式 ## 如果在Eureka Server的首页看到以下这段提示,则说明Eureka已经进入了保护模式。 | ``````1|``````EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.| | :-----: | :-----: | | ``````1 | ``````EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE. | 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。 详见:[https://github.com/Netflix/eureka/wiki/Understanding-Eureka-Peer-to-Peer-Communication][https_github.com_Netflix_eureka_wiki_Understanding-Eureka-Peer-to-Peer-Communication] ## 如何解决Eureka Server不踢出已关停的节点的问题 ## 在开发过程中,我们常常希望Eureka Server能够迅速有效地踢出已关停的节点,但是新手由于Eureka自我保护模式,以及心跳周期长的原因,常常会遇到Eureka Server不踢出已关停的节点的问题。解决方法如下: (1) Eureka Server端:配置关闭自我保护,并按需配置Eureka Server清理无效节点的时间间隔。 | ``````12|``````eureka.server.enable-self-preservation#设为false,关闭自我保护eureka.server.eviction-interval-timer-in-ms#清理间隔(单位毫秒,默认是60*1000)| | :-----: | :-----: | | ``````12 | ``````eureka.server.enable-self-preservation#设为false,关闭自我保护eureka.server.eviction-interval-timer-in-ms#清理间隔(单位毫秒,默认是60*1000) | (2) Eureka Client端:配置开启健康检查,并按需配置续约更新时间和到期时间。 | ``````123|``````eureka.client.healthcheck.enabled#开启健康检查(需要spring-boot-starter-actuator依赖)eureka.instance.lease-renewal-interval-in-seconds#续约更新时间间隔(默认30秒)eureka.instance.lease-expiration-duration-in-seconds#续约到期时间(默认90秒)| | :-----: | :-----: | | ``````123 | ``````eureka.client.healthcheck.enabled#开启健康检查(需要spring-boot-starter-actuator依赖)eureka.instance.lease-renewal-interval-in-seconds#续约更新时间间隔(默认30秒)eureka.instance.lease-expiration-duration-in-seconds#续约到期时间(默认90秒) | 示例: 服务器端配置: | ``````1234|``````eureka:server:enable-self-preservation:falseeviction-interval-timer-in-ms:4000| | :-----: | :-----: | | ``````1234 | ``````eureka:server:enable-self-preservation:falseeviction-interval-timer-in-ms:4000 | 客户端配置: | ``````1234567|``````eureka:client:healthcheck:enabled:trueinstance:lease-expiration-duration-in-seconds:30lease-renewal-interval-in-seconds:10| | :-----: | :-----: | | ``````1234567 | ``````eureka:client:healthcheck:enabled:trueinstance:lease-expiration-duration-in-seconds:30lease-renewal-interval-in-seconds:10 | 注意: 更改Eureka更新频率将打破服务器的自我保护功能,生产环境下不建议自定义这些配置。 详见:[https://github.com/spring-cloud/spring-cloud-netflix/issues/373][https_github.com_spring-cloud_spring-cloud-netflix_issues_373] ## 自定义Eureka的Instance ID ## 在Spring Cloud中,服务的Instance ID的默认值是`${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}` ,也就是`机器主机名:应用名称:应用端口` 。因此在Eureka Server首页中看到的服务的信息类似如下:`itmuch:microservice-provider-user:8000` 。如果想要自定义这部分的信息怎么办? 示例: ``` eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: preferIpAddress: true instance-id: ${spring.cloud.client.ipAddress}:${server.port} # 将Instance ID设置成IP:端口的形式 ``` ## Eureka配置最佳实践参考 ## [https://github.com/spring-cloud/spring-cloud-netflix/issues/203][https_github.com_spring-cloud_spring-cloud-netflix_issues_203] ## 注意点:eureka.client.healthcheck.enabled=true配置项必须设置在application.yml中 ## `eureka.client.healthcheck.enabled=true` 只应该在application.yml中设置。如果设置在bootstrap.yml中将会导致一些不良的副作用,例如在Eureka中注册的应用名称是UNKNOWN等。 转自:http://www.itmuch.com/spring-cloud-sum-eureka/ [https_github.com_Netflix_eureka_wiki_Configuring-Eureka]: https://github.com/Netflix/eureka/wiki/Configuring-Eureka [http_cloud.spring.io_spring-cloud-static_Camden.SR1_why_is_it_so_slow_to_register_a_service]: http://cloud.spring.io/spring-cloud-static/Camden.SR1/#_why_is_it_so_slow_to_register_a_service [https_github.com_Netflix_eureka_wiki_Understanding-Eureka-Peer-to-Peer-Communication]: https://github.com/Netflix/eureka/wiki/Understanding-Eureka-Peer-to-Peer-Communication [https_github.com_spring-cloud_spring-cloud-netflix_issues_373]: https://github.com/spring-cloud/spring-cloud-netflix/issues/373 [https_github.com_spring-cloud_spring-cloud-netflix_issues_203]: https://github.com/spring-cloud/spring-cloud-netflix/issues/203 ------- 来源:[http://ddrv.cn/a/88268](http://ddrv.cn/a/88268)

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Spring Cloud中,Eureka常见问题总结

相关推荐