我试图通过实现接口 ReactorServiceInstanceLoadBalancer 来定义自定义 LoadBalancer,以替换 RoundRobinLoadBalancer 定义的默认负载均衡器。
但它不起作用。
我发现类'LoadBalancerClientConfiguration'中定义的原始bean在应用程序启动时没有被实例化,而是在调用'LoadBalancerClientFactory.getInstance'时被实例化,并且构造函数是使用StandardEnvironment的bean自动装配的,而在我的配置中定义的bean在应用程序启动时实例化,并使用 StandardReactiveWebEnvironment 的 bean 自动装配。
很困惑!我的英语不太好。感谢您阅读整个描述!下面是我的代码:
`@Slf4j
public class CustomLoadBalancer implements ReactorServiceInstanceLoadBalancer {
// ...detail omitted
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnDiscoveryEnabled
public class CustomLoadBalancerClientConfiguration {
@Bean
public ReactorLoadBalancer<ServiceInstance> reactorServiceInstanceLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory, ServiceInstanceChooser serviceInstanceChooser) {
String name = loadBalancerClientFactory.getName(environment);
return new CustomLoadBalancer(serviceInstanceChooser, loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
}
}