You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.1.2网关如何切换为加权响应时间服务端负载均衡算法

解决方案

你需要创建配置类来实现加权响应时间负载均衡算法的切换,因为当前Spring Cloud LoadBalancer并未提供直接通过application.properties配置就能启用该算法的选项,必须通过自定义配置类来完成服务端负载均衡的配置(网关作为服务入口,负载均衡逻辑在网关侧实现,即符合你要求的服务端负载均衡方案)。

具体操作步骤

1. 创建负载均衡配置类

在Gateway服务中新建配置类,注入WeightedResponseTimeLoadBalancer实例以覆盖默认负载均衡器:

import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

@Configuration
public class WeightedResponseTimeLBConfig {

    @Bean
    public ReactorLoadBalancer<ServiceInstance> weightedResponseTimeLoadBalancer(Environment env,
                                                                                 LoadBalancerClientFactory clientFactory) {
        String serviceName = env.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new org.springframework.cloud.loadbalancer.core.WeightedResponseTimeLoadBalancer(
                clientFactory.getLazyProvider(serviceName, ServiceInstanceListSupplier.class),
                serviceName);
    }
}

2. 绑定配置到目标服务

如果仅需对MRRANDOM服务生效,在Gateway的启动类上添加@LoadBalancerClient注解:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;

@SpringBootApplication
@EnableDiscoveryClient
@LoadBalancerClient(name = "MRRANDOM", configuration = WeightedResponseTimeLBConfig.class)
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

若要对所有服务生效,替换为@LoadBalancerClients(defaultConfiguration = WeightedResponseTimeLBConfig.class)即可。

3. 验证配置

启动Eureka、多个实例的Microservice random和Gateway,通过访问Gateway路由,观察请求是否按照加权响应时间策略分发到不同服务实例。

为什么不能只用配置文件?

当前Spring Cloud LoadBalancer的设计中,没有提供直接切换负载均衡算法的配置项(如spring.cloud.loadbalancer.algorithm=weighted-response-time),所有非默认的负载均衡逻辑都需要通过自定义配置类注入对应的ReactorLoadBalancer Bean,以此覆盖默认实现。

内容的提问来源于stack exchange,提问作者sertineitor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:40:10