0

我正在做一项工作,通过使用以下代码在运行时将路由动态设置到 Spring Cloud Gateway 中,

@Autowired
@Qualifier("inMemoryRouteDefinitionRepository")
private RouteDefinitionWriter routeDefinitionWriter;


RouteDefinition routeDefinition = ...; // my own route
routeDefinitionWriter.save(Mono.just(routeDefinition)).subscribe();
this.publisher.publishEvent(new RefreshRoutesEvent(this));

无论里面的谓词和过滤器是否可用甚至存在,都可以成功添加路由。如果存在不存在谓词或过滤器的路由,则会发生异常。

问题是如何在运行时获取可用的谓词和过滤器列表,这样我就可以检查传入的 RouteDefinition 是否有效。

到目前为止,我已经发现 RouteDefinitionRouteLocator 类中的可用谓词和过滤器列表,并且我可以自动装配它的一个实例。但这似乎不是解决问题的好方法。

@Autowired
@Qualifier("routeDefinitionRouteLocator")
private RouteDefinitionRouteLocator routeDefinitionRouteLocator;

有任何想法吗?非常感谢!!

4

1 回答 1

0

您可以将谓词和过滤器自动连接为列表。

@Autowired
private List<GatewayFilterFactory> gatewayFilters;

@Autowired
private List<RoutePredicateFactory> routePredicates;
于 2019-08-16T02:44:21.463 回答