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 方案的 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: 方案處理器會自動將過濾器置於最高優先順序。
預設情況下,當 ReactorLoadBalancer 找不到服務例項時,將返回 503
LoadBalancerClient 返回的 ServiceInstanceisSecure 值會覆蓋請求 Gateway 時指定的方案。例如,如果請求透過 HTTPS 進入 Gateway,但 ServiceInstance 指示它不安全,則下游請求將透過 HTTP 進行。相反的情況也可能適用。
Gateway 支援所有 LoadBalancer 功能。您可以在 Spring Cloud Commons 文件中閱讀更多相關資訊。
© . This site is unofficial and not affiliated with VMware.