写点什么

Eureka 常见问题汇总及注意事项

用户头像
xcbeyond
关注
发布于: 2020 年 08 月 12 日
Eureka常见问题汇总及注意事项

0、前言      



      在Spring Cloud中,Eureka是接触和使用最多的组件,也是最重要的一个组件,在使用过程中经常会遇到各类突发问题,来的莫名奇妙。现把一些常见问题、注意事项,与大家进行分享。



     Eureka一般出现问题原因分为两类:



  • Eureka版本不同带来的问题

  • Eureka参数配置问题



生产环境下,Eureka参数配置建议使用默认配置,除非明确清楚或明确有这样修改默认配置的需求。



1、EnableEurekaClient和EnableDiscoveryClient



      在不同的应用程序中,有人使用EnableEurekaClient,有人使用EnableDiscoveryClient,都能作为Eureka Client的注解。有何区别呢?



     服务发现是有多实现方式,即:多种组件可以作为注册中心,eurekaconsulzookeeper@EnableEurekaClient是在spring-cloud-netflix中,仅仅适合于Eureka注册中心。@EnableDiscoveryClient是在spring-cloud-commons中,适合Eureka、Consul、Zookeeper注册中心。在使用时要注意使用依赖的包,否则会发现找不到该注解。



参考:https://stackoverflow.com/questions/31976236/whats-the-difference-between-enableeurekaclient-and-enablediscoveryclient



2、已停止的微服务不注销或注销有延迟



     在使用Eureka Client时,可能会发现当微服务(Eureka Client)已经停止了,而注册中心仍然显示该服务处于正常状态,或者过段时间才会注销。然而,这种情况在实际应用中是大家不太希望看见的,希望一旦服务发生异常或宕机,注册中心应该理解体现出来。



     这是由于Eureka Server注销无效节点周期、自我保护模式的因素造成的,因此会出现服务不注销或注销有延迟。解决办法如下:



  • Eureka Server



关闭自我保护模式,并配置注销无效节点周期时间间隔。

# 默认值为true。设为false, 关闭自我保护, 从而保证会注销微服务
eureka.server.enable-self-preservation=false
# 清理间隔(单位毫秒,默认是60 * 1000)。根据需求将时间间隔设置短些,例如:设置1秒,一旦down掉,则会立即注销
eureka.server.eviction-interval-timer-in-ms=1000



Eureka自我保护模式:

    主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。

参考:https://github.com/Netflix/eureka/wiki/Understanding-Eureka-Peer-to-Peer-Communication



参考:https://github.com/spring-cloud/spring-cloud-netflix/issues/1322



  • Eureka Client



当Client端开启健康检查时,可以适当的按需配置续约更新时间和到期时间。这样做智能在一定程度上缓解注销延迟的程度,但不能真正解决立即注销,可以在进行微服务(Eureka Client)异常或关机时,主动调用Eureka Rest API来注销该服务,注销接口:http://localhost:8761/eureka/apps的DELETE 请求方式。



# 默认值为false。设为true,开启健康检查(需要spring-boot-starter-actuator 依赖)
eureka.client.healthcheck.enabled=true
# 续约更新时间间隔(默认是30秒)
eureka.instance.lease-renewal-interval-in-seconds=?
# 续约到期时间(默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=?



参考:https://stackoverflow.com/questions/39661399/eureka-slow-to-remove-instances



3、Eureka的UNKNOWN 问题



      注册中心(Eureka Server)中服务状态,常见的有UP、DOWN,但有时会出现另外一种UNKNOWN状态,或者UNKNOWN服务名。



  • UNKNOWN服务名



     问题显而易见,只需在服务(Eureka Client)配置中配置明确的服务名即可。配置参数为spring.application.name 或者 eureka.instance.appname ,如果这两个参数都不配置,则将会出现UNKNOWN服务名。温馨提示:为了程序的可读性,极力推荐配置明确的服务名。



  • UNKNOWN状态



    服务为UNKNOWN状态,是很少见的问题。服务状态用于辨别服务是否可用(可调用),来源于对服务的健康检查(需要spring-boot-starter-actuator的依赖)所致。



    当服务(Eureka Client)配置参数eureka.client.healthcheck.enabled=true时,必须要配置在application.yml或application.properties配置文件中,而不能配置在bootstrap.yml或bootstrap.properties中,否则在一些情况下可能会出现UNKNOWN状态的问题。



参考:https://github.com/spring-cloud/spring-cloud-netflix/issues/1276





发布于: 2020 年 08 月 12 日阅读数: 85
用户头像

xcbeyond

关注

不为别的,只为技术沉淀、分享。 2019.06.20 加入

公众号:程序猿技术大咖 知识星球:技术那些事

评论

发布
暂无评论
Eureka常见问题汇总及注意事项