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

Spring Cloud LoadBalancer 4.1.1:如何获取ReactiveLoadBalancer.Factory?

获取Spring Cloud LoadBalancer 4.1.1中ReactiveLoadBalancer.Factory实例的方法

ReactiveLoadBalancer.Factory是Spring Cloud LoadBalancer自动注册的容器Bean,你可以通过以下两种常用方式获取:

1. 依赖注入(推荐)

在配置类或需要使用该实例的组件中,直接通过构造方法注入即可,Spring会自动提供实例:

配置类中注入示例

import org.springframework.cloud.client.loadbalancer.ReactiveLoadBalancer;
import org.springframework.cloud.loadbalancer.core.HealthCheckServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import reactor.core.publisher.Mono;
import java.util.function.BiFunction;

@Configuration
public class CustomLoadBalancerConfig {

    @Bean
    public ServiceInstanceListSupplier healthCheckSupplier(
            ServiceInstanceListSupplier delegate,
            ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory) {

        // 自定义健康检查逻辑
        BiFunction<ServiceInstance, String, Mono<Boolean>> aliveFunction = (instance, serviceId) -> {
            // 这里替换为实际的健康检查逻辑,比如调用实例的/actuator/health端点
            return Mono.just(true);
        };

        return new HealthCheckServiceInstanceListSupplier(delegate, loadBalancerClientFactory, aliveFunction);
    }
}

普通组件中注入示例

import org.springframework.cloud.client.loadbalancer.ReactiveLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstance;
import org.springframework.stereotype.Component;

@Component
public class LoadBalancerHandler {

    private final ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerFactory;

    // 构造方法注入(Spring 4.3+推荐方式)
    public LoadBalancerHandler(ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerFactory) {
        this.loadBalancerFactory = loadBalancerFactory;
    }

    public void useLoadBalancer(String serviceId) {
        ReactiveLoadBalancer<ServiceInstance> loadBalancer = loadBalancerFactory.getInstance(serviceId);
        // 执行负载均衡相关操作
    }
}

2. 通过ApplicationContext获取

如果在非Spring管理的类中需要获取,可以通过ApplicationContext手动获取:

import org.springframework.context.ApplicationContext;
import org.springframework.cloud.client.loadbalancer.ReactiveLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstance;

public class NonSpringManagedClass {

    public void getLoadBalancerFactory(ApplicationContext context) {
        ReactiveLoadBalancer.Factory<ServiceInstance> factory = 
            context.getBean(ReactiveLoadBalancer.Factory.class);
        // 使用实例
    }
}

说明

Spring Cloud LoadBalancer的自动配置类会自动创建并注册ReactiveLoadBalancer.Factory<ServiceInstance>实例,因此你无需手动实例化,直接依赖注入即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:02:54