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
|