微服务--Gateway--局部过滤器接口耗时【重要】
局部过滤器 GateWayFilter ,
通过***GateWayFilterFactory
-> 然后只需配置spring.cloud.gateway.routes[1].filters[1] = LogTime=gte,1000 【1000 单位指的是 毫秒】
1.找规律
局部过滤器命名规则 : ***GateWayFilterFactory 必须以GateWayFilterFactory结尾
/* 注意名称约定
* AddRequestHeaderGatewayFilterFactory 配置的时候写的是 AddRequestHeader
* AddRequestParameterGatewayFilterFactory 配置的时候写的是 AddRequestParameter
* LogTimeGatewayFilterFactory 配置的时候 只需要配置 LogTime 即可
* */
spring.cloud.gateway.routes[0].filters[0] = LogTime=gte,500
2.接口耗时过滤器
package com.***.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.factory.AbstractNameValueGatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Slf4j
@Component
public class LogTimeGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {
private static long timeSpan = 0;
@Override
public GatewayFilter apply(NameValueConfig config) {
String timeSpanStr = config.getValue();
timeSpan = Long.valueOf(timeSpanStr);
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
long startTime = System.currentTimeMillis();
return chain.filter(exchange).then(Mono.fromRunnable(()->{
long endTime = System.currentTimeMillis();
// 耗时时间
long time = endTime-startTime;
if(time >= timeSpan){
log.debug("{} 耗时:{}",exchange.getRequest().getURI(), time);
}
}));
}
};
}
}