我想实现一个自定义的终结点类来检查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;
}
}
AbstractHealthIndicator类
public class CustomHealth extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception
{
// Our logic to check zookeeper health
}
}
我对使用哪种方法感到困惑。我相信检查Zookeeper健康状况的逻辑是简单地声明一个CuratorFramework对象,然后执行curator.getState()并从那里返回生成器,对于端点,附加@RestControllerEndPoint来声明路径。请帮忙!
答案 0 :(得分:1)
由您决定选择哪一个,区别在于AbstractHealthIndicator
:
doHealthCheck(builder)
调用,如果您的健康检查失败并返回异常,则返回状态DOWN。因此,AbstractHealthIndicator
通常更方便使用,因为您可以跳过错误处理。需要提供有关异常的自定义状态详细信息时,选择实施原始HealthIndicator
。
例如Zookeeper健康指标,请参考spring-cloud-zookeeper 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
的{{1}}组件下
检查以下文档以获取更多信息: