在我们的代码中,我们使用Spring Cloud Gateway通过流畅的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()
方法之后定义谓词?在调用uri()
之前或之后定义谓词有什么区别?