Overview
客户端代码内通过某种方式获取 eureka server
是否触发自我保护。由于eureka server
并未提供任何API
或者client sdk
方式暴露该指标,只能自己寻找获取方式
解决方式
唯一能够获取eureka server
是否开启自我保护的途径是eureka server
页面,所以可以通过页面入手。自我保护被触发时页面会显示如下内容
查看spring cloud eureka
前端页面的实现逻辑,就能获取自我保护是否被触发。
根据navbar.ftl
内容,找到自我保护是否被触发的条件是isBelowRenewThresold
和registry.selfPreservationModeEnabled
。
根据页面找到对应的后端代码
至此如何获取自我保护是否触发变得非常简单,可以在eureka server
自定义一个接口,返回自我保护结果即可。
@Autowired
private PeerAwareInstanceRegistry registry;
@GetMapping("/self-preservation/test")
public String selfPreservationCheck() {
return String.valueOf(registry.isBelowRenewThresold() == 1 && registry.isSelfPreservationModeEnabled());
}
当自我保护触发时,调用接口返回true