跳到主要内容
版本:5.0.1

LoadBalancer Filter

DeepSeek V3 中英对照 LoadBalancer Filter

负载均衡器过滤器需要一个 serviceId 参数。LoadBalancerClient 使用此参数来选择用于路由的实例。负载均衡器过滤器需要在 Java DSL 中显式使用。使用负载均衡器过滤器时,请在 org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions 中使用空的 http() 方法。

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 Filter 可以通过使用带有 lb 方案的 URI(例如 lb://myservice)在配置中使用,它利用 Spring Cloud 的 LoadBalancerClient 将名称(本例中为 myservice)解析为实际的主机和端口,并替换同一属性中的 URI。以下配置展示了如何配置 LoadBalancer Filter:

spring:
cloud:
gateway:
server:
webmvc:
routes:
- id: api_route
uri: lb://apiservice
predicates:
- Path=/api/**
注意

如果使用 lb() 过滤器,需要将其置于任何操作路径的过滤器(如 setPath() 或 stripPrefix())之后,否则生成的 URL 可能不正确。配置中的 lb: 方案处理器会自动将该过滤器置于最高优先级顺序。

备注

默认情况下,当 ReactorLoadBalancer 无法找到服务实例时,会返回 503 状态码。

备注

从 LoadBalancerClient 返回的 ServiceInstance 的 isSecure 值会覆盖对 Gateway 发出的请求中指定的方案。例如,如果请求通过 HTTPS 进入 Gateway,但 ServiceInstance 指示它不安全,则下游请求将通过 HTTP 发出。相反的情况也可能适用。

提示

Gateway 支持所有 LoadBalancer 的功能。你可以在 Spring Cloud Commons 文档 中了解更多相关信息。