Java Routes API
Spring Cloud Gateway Server MVC 使用 Spring WebMvc.fn RouterFunctions.Builder 作为创建路由(这是 WebMvc.fn RouterFunction 实例)的默认方式。
可以通过调用 RouterFunctions.route() 来获取 RouterFunctions.Builder
实例。
import static org.springframework.web.servlet.function.RouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
class SimpleGateway {
@Bean
public RouterFunction<ServerResponse> getRoute() {
return route().GET("/get", http("https://httpbin.org")).build();
}
}
对于每个 HTTP 方法(GET、POST 等)以及路径谓词,例如上面的 /get
,在 RouterFunctions.Builder
中都有方法。最终参数是 HandlerFilterFunction
,本例中它是 HandlerFunctions.http()
。为每个 HTTP 方法都有重载方法用于其他 RequestPredicate
参数,还提供了一个通用的 route(RequestPredicate, HandlerFunction
) 方法以供一般使用。
Gateway MVC implementation of RouterFunctions.Builder
一些高级过滤器要求向请求属性中添加一些元数据。为了适应这种情况,有一个 org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions
类。GatewayRouterFunctions.route(String routeId)
创建一个 RouterFunctions.Builder
实例,然后添加一个 "before" 过滤器,以将 routeId
添加为请求元数据。
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
class SimpleGateway {
@Bean
public RouterFunction<ServerResponse> getRoute() {
return route("simple_route").GET("/get", http("https://httpbin.org")).build();
}
}
Gateway MVC Handler Functions
各种 RouterFunctions.Builder
方法需要一个 HandlerFunction<ServerResponse>
。要创建由 MVC Gateway 代理的路由,HandlerFunction
实现会在 org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions
中提供。最基本的是 http()
HandlerFunction
。如果将 URI
作为一个参数提供,那就是用于将 HTTP 请求发送给下游目标的 URI
(如下面的示例中所见)。如果未传递任何参数,该函数将在 org.springframework.cloud.gateway.server.mvc.common.MvcUtils.GATEWAY_REQUEST_URL_ATTR
请求属性中查找 URI
。这允许动态目标(例如负载平衡)设置 URI
。