我使用服务器在yml配置中定义一些路由,这些路由存储在Consul Key/Value中。当我试图使用Fluent API(基于Java的配置(定义路由时,网关无法正常工作,也无法处理这些路由。
基于服务器的配置示例:
cloud:
gateway:
discovery:
locator:
enabled: false
routes:
- id: foo
predicates:
- Path=/foo/**
uri: lb:https://bar
以Fluent风格定义路线:
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route(p -> p
.path("/testing_route")
.filters(f -> f.addRequestHeader("Hello", "World"))
.uri("http://httpbin.org:80"))
.build();
}
结果,网关向/testing_route路径返回404所有请求的状态代码,这意味着该路由不工作。
在我遇到问题的情况下,我想使用基于DSL配置的ModifyRequestBodyFilter修改请求主体,这意味着我需要同时使用这两种方式来配置上下文。实际上,这个代码没有任何作用。
我们可以在yml中将RouteLocatorBuilder与基于属性的配置结合起来吗?
弹簧套2.2.5释放春云霍克斯顿。SR3
在问题线程中回答https://github.com/spring-cloud/spring-cloud-gateway/issues/1953#issuecomment-705081934
TL;DR需要启用CachingRouteLocator
@Bean
@Primary
@ConditionalOnMissingBean(name = "cachedCompositeRouteLocator")
// TODO: property to disable composite?
public RouteLocator cachedCompositeRouteLocator(List<RouteLocator> routeLocators) {
return new CachingRouteLocator(new CompositeRouteLocator(Flux.fromIterable(routeLocators)));
}