代码之家  ›  专栏  ›  技术社区  ›  Roshan Gade

如何计算总执行时间,并在Spring WebFlux中为每个请求设置响应头,即x-runtime?

  •  2
  • Roshan Gade  · 技术社区  · 7 年前

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

    是否可以使用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);
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Brian Clozel    7 年前

    如果您使用的是Spring Boot,那么应该使用 spring-boot-starter-actuator 为此。

    如果你没有使用Spring Boot,你仍然应该看看 Micrometer ,它使用Spring WebFlux来收集此类数据。

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

    • 处理程序链可能返回,但实际的响应处理/写入可能尚未完成
    • 使用简单计时器不会考虑GC暂停
    • 查看度量值样本并不是很重要,百分位数会给你更多

    在任何情况下,你都可以看看Spring Boot的 MetricsWebFilter ( here )检查如何使用千分尺实现这一点。