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

如何在Spring Cloud Gateway中对指定URI列表实现请求负载均衡?

在无注册中心和独立负载均衡组件下实现Spring Cloud Gateway负载均衡

你当前的配置写法有误,Spring Cloud Gateway的uri字段无法直接接收多个IP列表。要实现对固定后端实例的负载均衡,可通过Spring Cloud LoadBalancer结合自定义服务实例列表来完成,具体步骤如下:

1. 调整Gateway路由配置

将uri改为负载均衡前缀lb://+自定义服务名,配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: myService-endpoints
          uri: lb://myService  # 自定义服务名,后续需和代码中对应
          predicates:
            - Path=/myservice/**

2. 确保依赖完整

确保项目中引入spring-cloud-starter-loadbalancer(Spring Cloud Gateway默认集成此依赖,但如果是手动管理依赖需明确添加):

<!-- Maven示例 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

3. 自定义服务实例提供者

创建配置类,手动提供后端服务实例列表,让LoadBalancer能获取到可用节点:

import org.springframework.cloud.client.DefaultServiceInstance;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import reactor.core.publisher.Flux;

import java.util.Arrays;
import java.util.List;

@Configuration
public class FixedInstanceConfig {

    @Bean
    public ServiceInstanceListSupplier fixedServiceInstanceSupplier() {
        return new ServiceInstanceListSupplier() {
            @Override
            public String getServiceId() {
                return "myService"; // 必须和配置中lb://后的服务名一致
            }

            @Override
            public Flux<List<ServiceInstance>> get() {
                // 替换成你的实际后端IP和端口
                List<ServiceInstance> instances = Arrays.asList(
                        new DefaultServiceInstance("instance-1", "myService", "myServiceIp1", 8080, false),
                        new DefaultServiceInstance("instance-2", "myService", "myServiceIp2", 8080, false)
                );
                return Flux.just(instances);
            }
        };
    }
}

4. 可选:调整负载均衡策略

Spring Cloud LoadBalancer默认使用**轮询(Round Robin)**策略,若需要改为随机策略,可添加配置:

spring:
  cloud:
    loadbalancer:
      configurations: random

原理说明

通过lb://前缀触发Spring Cloud LoadBalancer的负载均衡逻辑,自定义的ServiceInstanceListSupplier提供固定的后端实例列表,LoadBalancer会根据选定的策略将请求分发到不同的实例上,无需依赖Eureka等注册中心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:35:38