以更好的方式轮询弹簧保护套执行器端点(以流方式而不是轮询?)]

问题描述 投票:0回答:1

我正在编写一个Web UI,用于监视Spring Actuator支持的Spring Boot中的另一个Java应用程序。

现在,我可以使用常规的Get请求(通过Spring WebFlux的WebClient.get()方法)从另一个客户端Sprint Boot Web应用程序轮询Spring Actuator的端点。

但是,如果某些数据发生变化,我们可以说是一个指标终结点(即,CPU使用率始终在变化),我必须“刷新”获取请求。我可以通过@Scheduled注释在计划的计时器上进行设置,但我觉得有更好的方法吗?

我知道如何从不断流动的数据的get请求中检索通量,但是必须在服务器上创建通量。 Spring Boot Actuator可以提供指标的流量,以便我进行流式处理吗?

这里是一些代码,我目前通过一个预定的方法调用此方法,该方法每500毫秒对其执行一次ping操作。

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
        });
    })

我正在编写一个Web UI,用于监视Spring Actuator支持的Spring Boot中的另一个Java应用程序。现在,我可以从其他客户端Sprint Boot网站轮询Spring Actuator的端点...

spring-boot spring-webflux server-sent-events spring-boot-actuator spring-webclient
1个回答
0
投票

首先,应避免过于频繁地调用执行器端点,尤其是在您的应用程序不使用数据时。如果您的应用程序是仪表板,则除非有人当前正在查看该仪表板,否则不应获取数据。这排除了@Scheduled的使用,无论如何都会发生。同样,执行器数据可以被缓存,或者可以在应用程序上产生一定的负载,具体取决于端点。这应该仔细考虑。

© www.soinside.com 2019 - 2024. All rights reserved.