Я программирую веб-интерфейс, который отслеживает другое приложение Java в Spring Boot, поддерживаемый Spring Actuator.
Прямо сейчас я могу опросить конечные точки Spring Actuator из другого клиентского веб-приложения Sprint Boot, используя обычный запрос Get (через метод Spring WebFlux WebClient.get ()).
Но если некоторые данные изменяются, скажем, одна из конечных точек метрики (т.е. использование ЦП, которое всегда изменяется), я должен «обновить» запрос на получение. Я могу установить его на запланированный таймер с помощью аннотации @Scheduled, но я чувствую, что есть способ сделать это лучше?
Я знаю, как получить поток из запроса на получение данных с постоянным потоком, но на сервере необходимо создать поток. Может ли Spring Boot Actuator предоставить поток показателей, чтобы я мог их транслировать?
Вот некоторый код, в настоящее время я вызываю этот метод с помощью запланированного метода, который проверяет его каждые 500 мс.
private Flux<Health> getHealth(String baseUrl) {
var fallbackValue = new Health();
fallbackValue.setStatus("Unknown");
return webClient.get().uri(baseUrl + "/actuator/health").retrieve().bodyToFlux(Health.class)
.onErrorReturn(fallbackValue);
}
Но он обновляется, только если я вызываю его и использую запланированную аннотацию, чтобы всегда обновлять его:
@Scheduled(fixedDelay = 500) // I want to remove this, instead of refreshing, I want the data to stream
public void pollCapHandlers() {
getHealth("http://localhost:8080").subscribe(health -> {
ui.access(() -> {
healthStatusTextField.setValue(health.getStatus()); // this doesn't update in real time
});
})