(五)注册中心-eureka的自我保护功能

(五)注册中心-eureka的自我保护功能,第1张

(五)注册中心-eureka的自我保护功能 eureka的自我保护功能 进入eureka自我保护功能

在上一章已经把用户服务(2个节点)和订单服务(2个节点)注册到了eureka集群中。如下效果图:

此时,我如果将用户服务其中一个节点8011断开,过一会看eureka控制台会出现如下图的红色字样,也就是说明eureka进入到了自我保护状态。
百度翻译:突发事件EUREKA可能错误地声称实例在未启动时已启动。续订小于阈值,因此实例不会为了安全而过期。
我的理解:eureka一旦进入自我保护状态,原来注册的服务节点信息不会被轻易删除,因此用户服务8011这个节点注册信息并没有消失。

eureka为啥需要有自我保护功能?

再次回到之前提到过的注册中心图,假设用户服务挂掉了,eureka收不到它的心跳,按理说用户服务就应该在注册中心列表中被剔除。但是也会存在另外一种情况,那就是用户服务和订单服务本身没有出现问题,但是由于网络原因,导致用户服务和注册中心eureka之前出现通讯故障,无法维持正常的心跳,而这种情况也就是eureka需要自我保护的原因。

关闭自我保护功能
    eureka的自我保护功能默认是开启的,也可以设置关闭。
    eureka集群application.yml
############################################################
#
# eureka 集群的注册中心
# web访问端口号  约定:7001-7003
#
############################################################
server:
  # 动态设置port,不传默认7001 假设传入7002,则就是7002
  port: ${port:7001}
  tomcat:
    uri-encoding: UTF-8

############################################################
#
# 配置项目信息
#
############################################################
spring:
  application:
    name: springcloud-eureka-server-cluster

############################################################
#
# eureka配置信息
#
############################################################
eureka:
  instance:
    # 集群中每个eureka的名字都是唯一的
    hostname: eureka-cluster-${server.port}
  # 自定义端口参数
  other-node-port2: ${p2:7002}
  other-node-port3: ${p3:7003}
  client:
    # 是否要把当前的eureka server注册到自己
    register-with-eureka: false
    # 从注册中心获得检索服务实例,server没有必要,直接false即可
    # 自己就是注册中心,所以没必要去获得其他服务的实例,然后去调用
    fetch-registry: false
    # 单实例配置自己的服务地址,高可用集群则配置多个地址
    service-url:
      defaultZone: http://eureka-cluster-${eureka.other-node-port2}:${eureka.other-node-port2}/eureka/,http://eureka-cluster-${eureka.other-node-port3}:${eureka.other-node-port3}/eureka/
  server:
    enable-self-preservation: false   # 关闭eureka的自我保护功能,一般开发环境可以关闭,生产环境开启
    eviction-interval-timer-in-ms: 5000   # 清理无效节点的时间,可以缩短为5s,默认60s

    用户服务application.yml配置
############################################################
#
# 用户微服务
# web访问端口号  约定:8001
#
############################################################
server:
  # 动态设置端口号,方便部署集群
  port: ${port:8001}
  tomcat:
    uri-encoding: UTF-8

############################################################
#
# 配置项目信息
#
############################################################
spring:
  application:
    name: user

############################################################
#
# eureka配置信息
#
############################################################
eureka:
  server:
    hostname: localhost
    port: 7000
  client:
    # 所有的微服务都必须注册到eureka中
    register-with-eureka: true
    # 从注册中心获得检索服务实例,用户服务需要配置为true
    # 用户服务要去获得其他服务的实例,然后去调用
    fetch-registry: true
    # 注册中心的服务地址
    service-url:
#      defaultZone: http://${eureka.server.hostname}:${eureka.server.port}/eureka/
      # 用户服务注册到eureka集群中
      defaultZone: http://eureka-cluster-7001:7001/eureka/,http://eureka-cluster-7002:7002/eureka/,http://eureka-cluster-7003:7003/eureka/
  instance:
    lease-renewal-interval-in-seconds: 3 # 调整微服务(eureka-client)和注册中心(eureka-server)之间的心跳时间
    lease-expiration-duration-in-seconds: 5 # eureka距离最近的一次心跳等待剔除的时间(假设是3s发送一次心跳,但是某次3s后eureka没有收到心跳,则距离上次心跳5s后,eureka会剔除该节点)默认90s,当前设置为5s

    重新启动各个服务,然后将用户服务8011节点断掉,从eureka管理控制台发现用户服务8011已经被剔除。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5712761.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存