为什么在调用方法'getInstance'时'reactorServiceInstanceLoadBalancer'实例化 Bean?



我试图通过实现ReactorServiceInstanceLoadBalancer接口来定义一个自定义负载平衡器,以取代RoundRobinLoadBalancers定义的默认负载平衡器。

但它不起作用。

我发现在类"LoadBalancerClientConfiguration"中定义的原始bean在应用程序启动时没有实例化,而是在调用"LoadBalance ClientFactory.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);
}
}

根据请求的serviceId创建一个单独的上下文,包括ReactorServiceInstanceLoadBalancer实例。可以提供您自己的实现,无论是默认的还是针对特定的服务。请参阅有关如何为Spring Cloud LoadBalancer提供自定义配置的文档。

相关内容

  • 没有找到相关文章

最新更新