LoadBalancer 過濾器
LoadBalancer 過濾器接受一個 serviceId
引數。LoadBalancerClient
使用此引數選擇用於路由的例項。LoadBalancer 過濾器需要在 Java DSL 中顯式使用。使用 LoadBalancer 過濾器時,請使用 org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions
中的空 http()
方法。
RouteConfiguration.java
import static org.springframework.cloud.gateway.server.mvc.filter.LoadBalancerFilterFunctions.lb;
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
@Configuration
class RouteConfiguration {
@Bean
public RouterFunction<ServerResponse> gatewayRouterFunctionsAddReqHeader() {
return route("api_route")
.GET("/api/**", http())
.filter(lb("apiservice"))
.build();
}
}
在配置中使用 LoadBalancer 過濾器
LoadBalancer 過濾器可以透過使用帶有 lb
scheme 的 URI(例如 lb://myservice
)在配置中使用,它使用 Spring Cloud LoadBalancerClient
將名稱(本例中的 myservice
)解析為實際的主機和埠,並替換同一屬性中的 URI。以下列表配置了一個 LoadBalancer 過濾器
application.yml
spring:
cloud:
gateway:
mvc:
routes:
- id: api_route
uri: lb://apiservice
predicates:
- Path=/api/**
如果使用 lb() 過濾器,它需要放在任何操縱路徑的過濾器(如 setPath() 或 stripPrefix() )之後,否則生成的 URL 可能會不正確。配置中的 lb: scheme 處理程式會自動將過濾器放在最高優先順序順序。 |
預設情況下,當 ReactorLoadBalancer 找不到服務例項時,會返回 503 。 |
從 LoadBalancerClient 返回的 ServiceInstance 的 isSecure 值會覆蓋傳送到 Gateway 的請求中指定的 scheme。例如,如果請求透過 HTTPS 進入 Gateway 但 ServiceInstance 指示它不安全,則下游請求將透過 HTTP 發出。相反的情況也適用。 |
Gateway 支援所有 LoadBalancer 特性。您可以在 Spring Cloud Commons 文件中閱讀更多相關資訊。 |