eureka服务心跳检测和自我保护机制

自我保护机制

当EurekaServer与EurekaClient网络不通的情况下,EurekaServer不会将EurekaClient服务剔除。

通过一个场景来了解一下:
有两个服务:用户服务app-user、订单服务app-order,用户服务做了集群,有两台机器,分别是8010和8011
img
现在order使用负载均衡的轮询机制,调用user的接口,可以看到是8010和8011轮询访问的。
img
那如果现在8010这台服务宕机了,会是什么情况?
img
当访问8010的时候,就报错了,我们再看一下Eureka的注册列表,宕机的8010还在列表之中
img
自我保护机制说明:
img

默认情况下,“EurekaClient客户端”会定时(默认5秒)向“EurekaServer注册中心”发送心跳包,就是说EurekaClient会定时向EurekaServer发送一个请求,如果EurekaServer能收到,就知道当前这个EurekaClient是存活状态。

如果EurekaServer在一定时间内(一般默认是90秒),没有收到EurekaClient发送的心跳包,就会从服务列表中剔除该服务。但是如果在短时间内丢失了大量服务实例的心跳,这时候EurekaServer就会开启自我保护机制,不会剔除服务。

在什么环境下开启自我保护机制?
  • 本地环境
    建议关闭自我保护机制。因为在本地开发环境中,EurekaServer端相对来说重启频率不高,但是在EurekaClient端,可能改动代码之后需要重启,频率相对来说比较高;那么EurekaClient端重启之后就不会及时去向EurekaServer端发送心跳包,EurekaServer端就会认为是网络延迟或者其他原因,不会剔除服务,这样的话就会影响开发效率。

  • 生产环境
    建议开启自我保护机制。因为生产环境不会频繁重启服务器,并且EurekaClient端与EurekaServer端存在网络延迟的几率较高,所以需要开启自我保护机制避免误删服务。

如何关闭自我保护机制?
  • 在EurekaServer端的yml配置文件中加入如下配置:

    eureka:
      server:
        # 服务自保机制,默认开启
        enable-self-preservation: true
        # 每隔多久触发一次服务剔除(单位ms毫秒)
        eviction-interval-timer-in-ms: 10000
    
  • 然后再在EurekaClient端的yml配置文件中添加如下配置:

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:20000/eureka/
      instance:
        # 每间隔5秒钟,向服务中心发送一条续约指令
        # 心跳检测与续约时间(开发环境可以将值设小一点,保证服务关闭后注册中心能及时剔除)
        lease-expiration-duration-in-seconds: 5
        # 如果30秒内,依然没有收到续约请求,判断服务过期
        lease-renewal-interval-in-seconds: 30
    

同样还是用之前的例子,把服务都打开,看一下注册列表:
img
user有两台,然后现在把8011这台服务关了,再刷新一下,8011就被剔除了。
img

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值