我想实现一个自定义端点类来检查 Zookeeper 的运行状况:
http://localhost:8080/actuator/health/zookeeper
问题:我是否扩展 AbstractHealthIndicaitor 或实现 HealthIndicator类?
运行状况指示器类
public class CustomHealth implements HealthIndicator {
@Override
public Health health() {
int errorCode = check(); // perform some specific health check
if (errorCode != 0) {
return Health.down()
.withDetail("Error Code", errorCode).build();
}
return Health.up().build();
}
public int check() {
// Our logic to check zookeeper health
return 0;
}
}
抽象健康指示器类
public class CustomHealth extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception
{
// Our logic to check zookeeper health
}
}
我对使用哪种方法感到困惑。我相信检查动物园管理员健康状况的逻辑是简单地声明一个 CuratorFramework 对象,然后执行 curator.getState(( 并从那里返回构建器,对于端点,附加@RestControllerEndPoint来声明路径。请帮忙!
由您选择哪一个,区别在于AbstractHealthIndicator
:
- 为您提供 Health.Builder 实例,因此您无需手动创建一个实例
- 使用 try-catch 包装
doHealthCheck(builder)
调用,如果您的运行状况检查失败且出现异常,则返回状态 DOWN。
因此,一般来说,AbstractHealthIndicator
使用起来更方便,因为您可以跳过错误处理。当您需要提供有关异常的自定义状态详细信息时,请选择实现原始HealthIndicator
。
有关动物园管理员健康指示器的示例,请参阅弹簧云动物园管理员提供的现有指标 https://github.com/spring-cloud/spring-cloud-zookeeper/blob/master/spring-cloud-zookeeper-core/src/main/java/org/springframework/cloud/zookeeper/ZookeeperHealthIndicator.java
关于端点/actuator/health/zookeeper
,我建议您使用 SpringBoot 2.2.0 中引入的称为健康指示器组https://spring.io/blog/2019/10/16/spring-boot-2-2-0#health-indicator-groups 的新功能
简而言之,如果使用组件扫描并命名为自定义运行状况指示器MyZookeeperHealthIndicator
,请添加以下属性以在自定义zookeeper
组下注册它:
management.endpoint.health.group.zookeeper.include=myZookeeper
之后,自定义运行状况详细信息将显示在myZookeeper
组件下,/actuator/health/zookeeper
有关详细信息,请查看以下文档:
编写自定义运行状况指示器https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#writing-custom-healthindicators
健康组https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#health-groups