Как реализовать пользовательскую конечную точку привода для проверки работоспособности зоопарка?

Я хотел бы реализовать собственный класс конечной точки для проверки работоспособности Zookeeper:

http://localhost:8080/actuator/health/zookeeper

ПРОБЛЕМА. Должен ли я расширять AbstractHealthIndicaitor или реализовывать класс HealthIndicator?

Класс 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
    }

}

Я запутался, какой подход использовать. Я считаю, что логика проверки работоспособности зоопарка состоит в том, чтобы просто объявить объект CuratorFramework, затем выполнить curator.getState() и вернуть оттуда билдер, а для конечной точки прикрепить @RestControllerEndPoint, чтобы объявить путь. Пожалуйста помоги!


person jukyduky    schedule 23.09.2019    source источник


Ответы (1)


Какой из них выбрать решать вам, разница в том, что AbstractHealthIndicator:

  1. Предоставляет вам экземпляр Health.Builder, поэтому вам не нужно создавать его вручную.
  2. Оборачивает вызов doHealthCheck(builder) с помощью try-catch, который возвращает статус 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 по адресу /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

person Yurii J    schedule 25.11.2019
comment
Привет @YuriiJ, хотя я проголосовал за ваш ответ, так как подход кажется логичным, вы нашли лучший и более простой подход через 1 месяц? ;-) - person jumping_monkey; 19.12.2019
comment
Привет @jumping_monkey. Что ж, первоначальная проблема заключалась в выборе, следует ли реализовать HealthIndicator или расширить AbstractHealthIndicator, и я считаю, что в моем ответе есть правильная рекомендация :) Что делать? Вы имеете в виду, когда говорите лучше и проще, не могли бы вы немного уточнить? - person Yurii J; 21.12.2019
comment
Если вы спрашиваете о Zookeeper, то достаточно проверить состояние CuratorFramework вместе с наличием ZNode, как в SpringCloud Zookeeper HealthIndicator. Также обратите внимание, что вы проверяете не само состояние Zookeeper, а скорее способность вашего экземпляра службы подключиться к нему — представьте, что внезапно произошел сетевой раздел, покидающий ваш сервис, изолированный от работоспособного кластера Zookeeper, который доступен из других мест. - person Yurii J; 21.12.2019