1

在我们的代码中,我们使用 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()

4

0 回答 0