30
30
import org .springframework .cloud .client .ServiceInstance ;
31
31
import org .springframework .cloud .client .discovery .DiscoveryClient ;
32
32
import org .springframework .cloud .client .discovery .ReactiveDiscoveryClient ;
33
+ import org .springframework .cloud .loadbalancer .core .RandomLoadBalancer ;
33
34
import org .springframework .cloud .loadbalancer .core .ReactorLoadBalancer ;
34
35
import org .springframework .cloud .loadbalancer .core .RetryAwareServiceInstanceListSupplier ;
35
36
import org .springframework .cloud .loadbalancer .core .RoundRobinLoadBalancer ;
59
60
* @author BaoLin Zhu
60
61
* @author changjin wei(魏昌进)
61
62
* @author Zhuozhi Ji
63
+ * @author Haotian Zhang
62
64
*/
63
65
@ Configuration (proxyBeanMethods = false )
64
66
@ ConditionalOnDiscoveryEnabled
@@ -68,13 +70,24 @@ public class LoadBalancerClientConfiguration {
68
70
69
71
@ Bean
70
72
@ ConditionalOnMissingBean
73
+ @ Conditional (DefaultStrategyCondition .class )
71
74
public ReactorLoadBalancer <ServiceInstance > reactorServiceInstanceLoadBalancer (Environment environment ,
72
75
LoadBalancerClientFactory loadBalancerClientFactory ) {
73
76
String name = environment .getProperty (LoadBalancerClientFactory .PROPERTY_NAME );
74
77
return new RoundRobinLoadBalancer (
75
78
loadBalancerClientFactory .getLazyProvider (name , ServiceInstanceListSupplier .class ), name );
76
79
}
77
80
81
+ @ Bean
82
+ @ ConditionalOnMissingBean
83
+ @ Conditional (RandomStrategyCondition .class )
84
+ public ReactorLoadBalancer <ServiceInstance > randomLoadBalancer (Environment environment ,
85
+ LoadBalancerClientFactory loadBalancerClientFactory ) {
86
+ String name = environment .getProperty (LoadBalancerClientFactory .PROPERTY_NAME );
87
+ return new RandomLoadBalancer (
88
+ loadBalancerClientFactory .getLazyProvider (name , ServiceInstanceListSupplier .class ), name );
89
+ }
90
+
78
91
@ Configuration (proxyBeanMethods = false )
79
92
@ ConditionalOnReactiveDiscoveryEnabled
80
93
@ Order (REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER )
@@ -309,6 +322,26 @@ public ServiceInstanceListSupplier retryAwareDiscoveryClientServiceInstanceListS
309
322
310
323
}
311
324
325
+ static class DefaultStrategyCondition implements Condition {
326
+
327
+ @ Override
328
+ public boolean matches (ConditionContext context , AnnotatedTypeMetadata metadata ) {
329
+ return LoadBalancerEnvironmentPropertyUtils .equalToForClientOrDefault (context .getEnvironment (),
330
+ "strategies" , "default" );
331
+ }
332
+
333
+ }
334
+
335
+ static class RandomStrategyCondition implements Condition {
336
+
337
+ @ Override
338
+ public boolean matches (ConditionContext context , AnnotatedTypeMetadata metadata ) {
339
+ return LoadBalancerEnvironmentPropertyUtils .equalToForClientOrDefault (context .getEnvironment (),
340
+ "strategies" , "random" );
341
+ }
342
+
343
+ }
344
+
312
345
static final class BlockingOnAvoidPreviousInstanceAndRetryEnabledCondition extends AllNestedConditions {
313
346
314
347
private BlockingOnAvoidPreviousInstanceAndRetryEnabledCondition () {
0 commit comments