第一种:
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有自我保护机制,在默认的情况下,如果Eureka在一定的时候内没有接收到某个微服务的心跳,就会注销该实例,默认时间是90秒。但是微服务本身是健康的,此时本不应该注销服务,但是Eureka又需要通过注销该服务来达到自我保护的目的,这时候Eureka注册中心的控制台页面就会报错。
解决方法如下:
Eureka服务端配置文件添加如下配置
eureka:
client:
#由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己
register-with-eureka: false
#由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
fetch-registry: false
server:
#注册中心清理间隔,单位为毫秒
eviction-interval-timer-in-ms: 10000
Eureka客户端配置文件添加如下配置
eureka:
client:
serviceUrl:
defaultZone: http://smile:111111@localhost:8761/eureka/
#Eureka客户端开启健康检查
healthcheck:
enabled: true
#采用IP注册
instance:
prefer-ip-address: true
#定义实例ID格式
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
#设置Eureka客户端租期更新时间,默认30秒
lease-renewal-interval-in-seconds: 10
#设置租期到期时间,默认90秒
lease-expiration-duration-in-seconds: 15
需要注意一点,配置文件中如果出现较多的备注,服务启动会报错,在实际开发中最好不要些这些备注。
第二种:
THE SELF PRESERVATION MODE IS TURNED OFF.
修改Eureka服务端配置文件
eureka:
client:
#由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己
register-with-eureka: false
#由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
fetch-registry: false
server:
#关闭注册中心自我保护机制
enable-self-preservation: true
#注册中心清理间隔,单位为毫秒
eviction-interval-timer-in-ms: 10000