基于属性(来自配置服务器)是否覆盖/替换了基于java的路由配置



我使用服务器在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))); 
} 

相关内容

  • 没有找到相关文章

最新更新