保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景时,一旦进入保护模式,Eureka Server将会尝试保护其服务的注册表中的信息,不在删除服务注册表中的数据。当网络故障恢复后,Eureka Server节点会自动退出保护模式,我们可以在Eureka Server中配置以下来关闭保护模式:
eureka.server.enable-self-preservation=false
关闭后页面显示:
客户端在注册时,服务的Instance ID默认是:
${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
,翻译过来就是“主机名:服务名称:服务端口”,我们在Eureka的Web控制台看到的就是 user-PC:colony-server:8761
我们可以通过在application.properties中配置如下来自定义我们的Instance_ID,
eureka.instance.instance-id
=${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
,这样我们在web控台看到的就是colony-server:127.0.0.1:8761
等我们的服务注册到Eureka中后,点击Instance ID,默认的跳转地址是 IP+Port/info,我们可以通过在客户端配置文件中指定跳转地址
#自定义Instance ID实例跳转链接
eureka.instance.status-page-url=http://www.baidu.com
当我们再次点击Instance ID时就可以跳到我们指定的地址了
我们在打开浏览器F12查看它的超链接就会发现,地址一变成我们想要的
当我们平时在做测试时会发现,明明我们已经停掉了某一个服务,但是在注册中心我们仍能看到该服务存在,我们可以通过在服务端&客户端进行配置来实时移除已失效的服务
服务端我们添加两个配置
#关闭自我保护模式
eureka.server.enable-self-preservation=false
#定时移除已失效的服务信息(单位:毫秒,默认60000毫秒)
eureka.server.eviction-interval-timer-in-ms=5000
客户端添加配置
#默认30秒
eureka.instance.lease-renewal-interval-in-seconds=5
#默认90秒
eureka.instance.lease-expiration-duration-in-seconds=5
其中eureka.instance.lease-renewal-interval-in-seconds表示Eureka Client发送心跳给Server端的频率
eureka.instance.lease-expiration-duration-in-seconds表示Eureka Server至上一次收到Client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没有收到下一次心跳,则移除该Instance