Spring-cloude-gateway流利的Java API具有定义谓词的不同方式

时间:2018-11-12 16:02:05

标签: spring-cloud-gateway

在我们的代码中,我们使用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()之前或之后定义谓词有什么区别?

0 个答案:

没有答案