自定义工厂类,配置后无法找到指定名称的GatewayFilterFactory
来源:13-3 升级config&product&api-gateway(下)

示邑
2019-04-04
廖师兄好!向你请教一个问题
我编写了一个自定义工厂类 RequestTimeGatewayFilterFactory ,在.yml中配置为 ‘- RequestTime=true’,但是报了一个错误 “java.lang.IllegalArgumentException: Unable to find GatewayFilterFactory with name RequestTime”,是我忽略了什么吗?Finchley.SR2版本,求解答!
spring:
profiles:
active: request_time_route
spring:
cloud:
gateway:
routes:
- id: request_time_route
uri: https://www.baidu.com/
filters:
- RequestTime=true
predicates:
- After=2019-03-20T17:42:47.789-07:00[Asia/Shanghai]
profiles: request_time_route
@Component
public class RequestTimeGatewayFilterFactory extends AbstractGatewayFilterFactory<RequestTimeGatewayFilterFactory.Config> {
private static final Log log = LogFactory.getLog(GatewayFilter.class);
public RequestTimeGatewayFilterFactory() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
// grab configuration from Config object
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
exchange.getAttributes().put("requestTimeBegin", System.currentTimeMillis());
return chain.filter(exchange).then(Mono.fromRunnable(new Runnable() {
@Override
public void run() {
// Manipulate the response in some way
Long startTime = exchange.getAttribute("requestTimeBegin");
if (startTime != null) {
StringBuilder sb = new StringBuilder(exchange.getRequest().getURI().getRawPath())
.append(": ")
.append(System.currentTimeMillis() - startTime)
.append("ms");
if (config.isWithParams()) {
sb.append(" params:").append(exchange.getRequest().getQueryParams());
}
log.info(sb.toString());
}
}
}));
}
};
}
@Override
public List<String> shortcutFieldOrder() {
return Arrays.asList("withParams");
}
public static class Config {
// Put the configuration properties for your filter here
private boolean withParams;
public boolean isWithParams() {
return withParams;
}
public void setWithParams(boolean withParams) {
this.withParams = withParams;
}
}
}
写回答
3回答
-
廖师兄
2019-04-08
spring: cloud: gateway: routes: - id: request_time_route uri: https://www.baidu.com/ filters: - RequestTime=true
你这不是用的zuul吧?我没有研究过,你去看看官方的例子是怎么用的
112019-04-11 -
weixin_慕妹4147359
2021-05-22
123
00 -
廖师兄
2019-04-05
配置里应该用冒号
RequestTime: true012019-04-08
SpringCloud Finchley(M2+RELEASE+SR2)微服务实战
SpringCloud组件实现微服务,【已升级Finchley.Release】
5673 学习 · 2489 问题
相似问题