为什么 bean 'reactorServiceInstanceLoadBalancer' 在调用方法 'getInstance' 时实例化?
Why is the bean 'reactorServiceInstanceLoadBalancer' instantiated just when the method 'getInstance' is called?
我正在尝试通过实现接口 ReactorServiceInstanceLoadBalancer 来定义自定义 LoadBalancer,以替换由 RoundRobinLoadBalancer 定义的默认负载均衡器。
但是不行。
我发现在class'LoadBalancerClientConfiguration'中定义的原始bean不是在应用程序启动时实例化的,而是在调用'LoadBalancerClientFactory.getInstance'时实例化的,并且构造器是自动装配的StandardEnvironment 的 bean,而我的配置中定义的 bean 在应用程序启动时实例化,并使用 StandardReactiveWebEnvironment 的 bean 自动装配。
很迷茫!
我的英语不是很好 good.Thank 请您阅读整个说明!
下面是我的代码:
`@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
实例。可以提供您自己的实现,包括默认实现或针对特定服务。请参阅 the documentation 了解如何为 Spring Cloud LoadBalancer 提供自定义配置。
我正在尝试通过实现接口 ReactorServiceInstanceLoadBalancer 来定义自定义 LoadBalancer,以替换由 RoundRobinLoadBalancer 定义的默认负载均衡器。
但是不行。
我发现在class'LoadBalancerClientConfiguration'中定义的原始bean不是在应用程序启动时实例化的,而是在调用'LoadBalancerClientFactory.getInstance'时实例化的,并且构造器是自动装配的StandardEnvironment 的 bean,而我的配置中定义的 bean 在应用程序启动时实例化,并使用 StandardReactiveWebEnvironment 的 bean 自动装配。
很迷茫! 我的英语不是很好 good.Thank 请您阅读整个说明! 下面是我的代码:
`@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
实例。可以提供您自己的实现,包括默认实现或针对特定服务。请参阅 the documentation 了解如何为 Spring Cloud LoadBalancer 提供自定义配置。