如何计算SpringWebFlux中每个请求的总执行时间并在响应头(即x-runtime)中进行设置?
我不知道我的方法是否正确?此外,请让我知道是否有任何其他的工作来实现这一点 是否可以使用WebFilter如何计算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.
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
()来检查如何使用测微计实现这一点