在上一章已经把用户服务(2个节点)和订单服务(2个节点)注册到了eureka集群中。如下效果图:
此时,我如果将用户服务其中一个节点8011断开,过一会看eureka控制台会出现如下图的红色字样,也就是说明eureka进入到了自我保护状态。
百度翻译:突发事件EUREKA可能错误地声称实例在未启动时已启动。续订小于阈值,因此实例不会为了安全而过期。
我的理解:eureka一旦进入自我保护状态,原来注册的服务节点信息不会被轻易删除,因此用户服务8011这个节点注册信息并没有消失。
再次回到之前提到过的注册中心图,假设用户服务挂掉了,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已经被剔除。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)