是否基于属性(来自配置服务器)override/replace java-based 路由配置?
Did properties-based (from configuration server) override/replace java-based routes config?
我使用服务器在 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();
}
结果网关 return 所有请求到 /testing_route 路径的 404 状态代码,这意味着此路由不工作。
如果遇到我的问题,我想使用基于 DSL 配置的 ModifyRequestBodyFilter 修改请求正文,这意味着 - 我需要使用两种方式来配置上下文。
实际上这段代码什么都不做。
我们可以在 yml 中结合 RouteLocatorBuilder 和基于 属性 的配置吗?
Spring 启动 2.2.5 发布
Spring Cloud Hoxton.SR3
已在问题线程中回答
https://github.com/spring-cloud/spring-cloud-gateway/issues/1953#issuecomment-705081934
长话短说;博士
需要启用 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)));
}
我使用服务器在 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();
}
结果网关 return 所有请求到 /testing_route 路径的 404 状态代码,这意味着此路由不工作。
如果遇到我的问题,我想使用基于 DSL 配置的 ModifyRequestBodyFilter 修改请求正文,这意味着 - 我需要使用两种方式来配置上下文。 实际上这段代码什么都不做。
我们可以在 yml 中结合 RouteLocatorBuilder 和基于 属性 的配置吗?
Spring 启动 2.2.5 发布 Spring Cloud Hoxton.SR3
已在问题线程中回答 https://github.com/spring-cloud/spring-cloud-gateway/issues/1953#issuecomment-705081934
长话短说;博士 需要启用 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)));
}