在我们的代码中,我们使用 Spring Cloud Gateway 使用 fluent java 路由 API 动态配置到服务的路由。假设我们要过滤传入请求的路径。我们可以通过两种方式实现这一点,我的问题是关于两者之间的区别:
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder, ThrottleGatewayFilterFactory throttle) {
return builder.routes()
.route(r ->
r.host("**.abc.org")
.and()
.path("/image/png")
.uri("http://httpbin.org:80")
)
.route(r ->
r.host("**.abc.org")
.uri("http://httpbin.org:80")
.and(ServerWebExchangeUtils.toAsyncPredicate(
new PathRoutePredicateFactory().apply(config -> config.setPattern("/images/jpeg")))
)
.build();
}
在第一个路由中,我们通过调用
PredicateSpec.path()
.在第二个示例中,我们使用
Route.AsyncBuilder.and()
(Route.AsyncBuilder
是.uri()
方法返回的类型) 配置路径。
显然,第一种方式更具可读性和简单性。但我想在方法之后定义谓词有一个用例uri()
吗?在调用 to 之前或之后定义谓词有什么区别uri()
?