概述
概述:谈到Eureka的自我保护机制时,我们需要知道其中一些客户端和服务端的概念。比如客户端的心跳发送时间间隔、服务续约时间;服务端的服务剔除时间间隔、阈值更新时间间隔。
客户端心跳发送时间间隔(eureka.instance.lease-renewal-interval-in-seconds):当Eureka客户端服务注册到服务端后,客户端会每固定间隔时间会向Eureka服务端发送心跳请求,用来通知Eureka服务端自己服务在正常运行中。
客户端服务续约时间(eureka.instance.lease-expiration-duration-in-seconds):当客户点最后一次发送心跳后,在该服务续约时间内如果没有再向服务端发送心跳链接,则服务器端可以对该服务进行剔除操作。
服务端的服务剔除时间间隔(eureka.server.eviction-interval-timer-in-ms):服务器在每固定间隔时间内会对客户端发送心跳情况进行检查,如果发现存在如上续约时间内,没有再次发送心跳链接的服务端,会对其在服务端内存中进行剔除操作。
阈值更新时间间隔(renewalPercentThreshold) : 服务器更新单位时间内接受心跳数与上次单位时间内的心跳总数的阈值因子值(系统默认配置的因子值为0.85)的间隔时间,默认为15分钟。(本次单位时间接受总数/上次单位时间接受心跳总数)
如上的默认配置时间都可以在org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean 源码中查看。
在了解了上述概念之后,正常情况下Eureka服务端也会按上面情况去运行,当个别客户端在续约时间未发送心跳,在服务端间隔时间内被扫描出来的客户端将会被剔除。但是如果在上面阈值更新时间间隔内统计出新的阈值因子比默认配置的0.85大的时候,Eureka就认为本台EurekaServer节点可能网络出现故障,当做自身问题进行做出处理,EurekaServer在该场景下将不会在去剔除客户端服务信息,对自己机制做出调整,此过程则为Eureka的自我保护机制。(当然也存在可能真的是Eureka客户端服务节点真的都挂了,调用将会出现失败情况)
一、在Eureka控制台页面配置展示服务端IP信息
Eureka客户端实例id: eureka.instance.instance-id,在没有配置的情况下在Eureka控制台默认展示为“服务器名:应用名称:端口”,我们可以通过SpringBoot配置文件对该展示项进行配置调整:我们修改为 ${spring.cloud.client.ip-address}:${server.port} 用ip和端口进行展示。配置文件如下:
server:
port: 80 #服务端口
spring:
application:
name: cloud-order-service #服务名称
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka1.com:7001/eureka/
instance:
prefer-ip-address: true #使用ip进行注册
instance-id: ${spring.cloud.client.ip-address}:${server.port} #向注册中心注册服务ID
lease-renewal-interval-in-seconds: 5 #发送心跳间隔时间 秒
lease-expiration-duration-in-seconds: 10 # 服务续约时间 10秒内没有发送心跳(宕机)
配置前和配置后访问Eureka的控制台页面如下:
二、配置Eureka客户端心跳连接时间、服务续约时间配置
在EurekaClient客户端配置文件中通过 eureka.instance.lease-renewal-interval-in-seconds 配置项进行配置心跳间隔时间。默认30秒
在EurekaClient客户端配置文件中通过 eureka.instance.lease-expiration-duration-in-seconds 配置项进行配置服务续约时间。默认 90秒
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka1.com:7001/eureka/
instance:
prefer-ip-address: true #使用ip进行注册
instance-id: ${spring.cloud.client.ip-address}:${server.port} #向注册中心注册服务ID
lease-renewal-interval-in-seconds: 5 #发送心跳间隔时间 秒
lease-expiration-duration-in-seconds: 10 # 服务续约时间 10秒内没有发送心跳(宕机)
三、Eureka服务端关闭自我保护以及配置服务剔除时间间隔
在EurekaServer服务端配置文件中通过 eureka.server.enable-self-preservation 配置项进行配置开启关闭Eureka自我保护机制。默认ture
在EurekaServer服务端配置文件中通过 eureka.server.eviction-interval-timer-in-ms 配置项进行配置服务剔除扫描间隔时间。默认 15分钟
eureka:
instance:
hostname: eureka1.com
client:
register-with-eureka: false #是否将自己注册到注册中心上
fetch-registry: false #是否从Eureka上获取注册信息
service-url:
defaultZone: http://eureka1.com:7001/eureka/
server:
eviction-interval-timer-in-ms: 20000 #服务剔除间隔
enable-self-preservation: false #关闭自我保护机制
最后
以上就是留胡子大雁为你收集整理的SpringCloud Eureka自我保护机制介绍及配置的全部内容,希望文章能够帮你解决SpringCloud Eureka自我保护机制介绍及配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复