Как я могу вызвать проверку работоспособности другого приложения Spring Boot из моей конечной точки работоспособности Spring Boot?

#spring-boot-actuator #indicator #contributor #compositehealthcontributor

Вопрос:

Интересно, как я могу вызвать пользовательский индикатор работоспособности:

  1. в том же приложении
  2. из другого приложения Spring Boot

Мое приложение разделено на базовое приложение (скорее, конфигурацию). A, который реализует почти всю функциональность (не имея основного метода), и другое приложение B (имеющее основной метод; -)), имеющее базовую конфигурацию в качестве зависимости в POM.

В A я внедрил пользовательский индикатор состояния здоровья:

 @Component
@RequiredArgsConstructor
public class AdapterDownstreamHealthIndicator implements HealthIndicator {

    private RestTemplate restTemplate;
    private String downStreamUrl = "http://localhost:8081/actuator";

    public AdapterDownstreamHealthIndicator(RestTemplate restTemplate, String downStreamUrl) {
        this.restTemplate = restTemplate;
        this.downStreamUrl = downStreamUrl;
    }

    @Override
    public Health health() {
//        try {
//            JsonNode resp = restTemplate.getForObject(downStreamUrl   "/health", JsonNode.class);
//            if (resp.get("status").asText().equalsIgnoreCase("UP")) {
//                System.out.println("JUHUUUUUUUUUUU!!!!");
//                return Health.up().build();
//            }
//        } catch (Exception ex) {
//            return Health.down(ex).build();
//        }
        return Health.down().build();
    }
}
 

В моем application.properties у меня есть некоторые свойства привода:

 management.endpoints.web.exposure.include=health,info,prometheus,adapterDownstream
spring.jackson.serialization.INDENT_OUTPUT=true
management.endpoint.health.show-details=always
 

Когда я войду http://localhost:9091/actuator/health/adapterDownstream в браузере отладчик не останавливается в методе health (), и я просто отображаю пустую страницу.

Я уже пытался расширить AbstractHealthIndicator вместо реализации HealthIndicator интерфейса.

Что я делаю неправильно, если пользовательский индикатор работоспособности не распознается?

В конце концов, я хочу провести какую-то глубокую проверку работоспособности, чтобы протестировать все компоненты, используемые в моем приложении. Может CompositeHealthContributor быть, следует использовать использование???

Ответ №1:

Как я уже описывал, у меня есть зависимость A, у которой нет основного метода, который загружается в мое приложение B в качестве зависимости в POM. До сих пор я пытался реализовать пользовательский класс проверки работоспособности/индикатор работоспособности в этой зависимости/модуле A.

Простое решение состоит в том, чтобы добавить a @ComponentScan(basePackages = "path.to.actuator") в основной метод приложения.