如何计算SpringWebFlux中每个请求的总执行时间并在响应头(即x-runtime)中进行设置?

如何计算SpringWebFlux中每个请求的总执行时间并在响应头(即x-runtime)中进行设置?,spring,spring-webflux,Spring,Spring Webflux,我不知道我的方法是否正确?此外,请让我知道是否有任何其他的工作来实现这一点 是否可以使用WebFilter package request.middlewares; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; import org.

我不知道我的方法是否正确?此外,请让我知道是否有任何其他的工作来实现这一点

是否可以使用WebFilter

package request.middlewares;

import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;

@Component
public class ResponseTimeCalculator implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        // is it possible here?
        exchange.getResponse().getHeaders().add("X-Runtime", "10ms");
        return chain.filter(exchange);
    }
}
package request.middleware;
导入org.springframework.stereotype.Component;
导入org.springframework.web.server.ServerWebExchange;
导入org.springframework.web.server.WebFilter;
导入org.springframework.web.server.WebFilterChain;
导入reactor.core.publisher.Mono;
@组成部分
公共类ResponseTimeCalculator实现WebFilter{
@凌驾
公共Mono筛选器(服务器WebExchange exchange、WebFilterChain链){
//这里可能吗?
exchange.getResponse().getHeaders().add(“X-Runtime”,“10ms”);
返回链。过滤器(交换);
}
}

如果您使用的是弹簧靴,您应该使用
弹簧靴启动器执行器

如果您没有使用SpringBoot,您仍然应该看看SpringWebFlux使用了哪些工具来收集此类数据

请注意,您的方法存在许多陷阱:

  • 处理程序链可能返回,但实际的响应处理/写入可能尚未完成
  • 使用简单的计时器不会考虑GC暂停
  • 看测量样本并不是很重要,百分位数给了你更多
在任何情况下,您都可以查看Spring Boot的
MetricsWebFilter
()来检查如何使用测微计实现这一点