我使用基于Java Webflux的Spring Cloud Gateway( https://spring.io/projects/spring-cloud-gateway )作为我环境中的API网关,并且在使用过滤器时感到困惑。 目标是一个过滤器,该过滤器可以节省请求到达服务器的时间,并记录返回响应的持续时间。 我的理解是,WebFilter是执行此操作的方法,并添加了一个有时有效但不起作用的方法。 在所有情况下,都会发生预请求部分,但通常不会触发回调。
WebFilter看起来像这样:
public Mono filter(ServerWebExchange exchange, WebFilterChain chain) {
var time = System.currentTimeMillis();
return exchange
.getPrincipal()
.flatMap(principal -> {
return chain.filter(exchange);
})
.doAfterSuccessOrError((r, t) -> {
System.out.println("This frequently doesn't happen");
var duration = System.currentTimeMillis() - time;
recordTime(duration);
});
}
我使用RouteLocator设置路线:
return
builder.routes()
.route(r -> r.predicate(&#