19
19
import com .nepxion .discovery .plugin .framework .loadbalance .DiscoveryEnabledLoadBalance ;
20
20
import com .nepxion .discovery .plugin .framework .loadbalance .weight .RuleWeightRandomLoadBalance ;
21
21
import com .nepxion .discovery .plugin .framework .loadbalance .weight .StrategyWeightRandomLoadBalance ;
22
- import com .netflix .loadbalancer .ILoadBalancer ;
23
22
import com .netflix .loadbalancer .PredicateBasedRule ;
24
23
import com .netflix .loadbalancer .Server ;
25
24
@@ -40,55 +39,63 @@ private List<Server> getServerList(Object key) {
40
39
41
40
@ Override
42
41
public Server choose (Object key ) {
42
+ List <Server > serverList = getServerList (key );
43
+
43
44
boolean isTriggered = false ;
44
45
45
46
WeightFilterEntity strategyWeightFilterEntity = strategyWeightRandomLoadBalance .getT ();
46
47
if (strategyWeightFilterEntity != null && strategyWeightFilterEntity .hasWeight ()) {
47
48
isTriggered = true ;
48
49
49
- List <Server > serverList = getServerList (key );
50
50
boolean isWeightChecked = strategyWeightRandomLoadBalance .checkWeight (serverList , strategyWeightFilterEntity );
51
51
if (isWeightChecked ) {
52
52
try {
53
- return strategyWeightRandomLoadBalance .choose (serverList , strategyWeightFilterEntity );
53
+ List <Server > filterServerList = filterEnabledServers (serverList );
54
+
55
+ return strategyWeightRandomLoadBalance .choose (filterServerList , strategyWeightFilterEntity );
54
56
} catch (Exception e ) {
55
- return filterChoose (key );
57
+ return filterChoose (serverList , key );
56
58
}
57
59
} else {
58
- return filterChoose (key );
60
+ return filterChoose (serverList , key );
59
61
}
60
62
}
61
63
62
64
if (!isTriggered ) {
63
65
WeightFilterEntity ruleWeightFilterEntity = ruleWeightRandomLoadBalance .getT ();
64
66
if (ruleWeightFilterEntity != null && ruleWeightFilterEntity .hasWeight ()) {
65
- List <Server > serverList = getServerList (key );
66
67
boolean isWeightChecked = ruleWeightRandomLoadBalance .checkWeight (serverList , ruleWeightFilterEntity );
67
68
if (isWeightChecked ) {
68
69
try {
69
- return ruleWeightRandomLoadBalance .choose (serverList , ruleWeightFilterEntity );
70
+ List <Server > filterServerList = filterEnabledServers (serverList );
71
+
72
+ return ruleWeightRandomLoadBalance .choose (filterServerList , ruleWeightFilterEntity );
70
73
} catch (Exception e ) {
71
- return filterChoose (key );
74
+ return filterChoose (serverList , key );
72
75
}
73
76
} else {
74
- return filterChoose (key );
77
+ return filterChoose (serverList , key );
75
78
}
76
79
}
77
80
}
78
81
79
- return filterChoose (key );
82
+ return filterChoose (serverList , key );
80
83
}
81
84
82
- public Server filterChoose (Object key ) {
83
- ILoadBalancer lb = getLoadBalancer ();
84
-
85
+ public List <Server > filterEnabledServers (List <Server > servers ) {
85
86
List <Server > serverList = new ArrayList <Server >();
86
- serverList .addAll (lb . getAllServers () );
87
+ serverList .addAll (servers );
87
88
88
89
if (discoveryEnabledLoadBalance != null ) {
89
90
discoveryEnabledLoadBalance .filter (serverList );
90
91
}
91
92
93
+ return serverList ;
94
+ }
95
+
96
+ public Server filterChoose (List <Server > servers , Object key ) {
97
+ List <Server > serverList = filterEnabledServers (servers );
98
+
92
99
Optional <Server > server = getPredicate ().chooseRoundRobinAfterFiltering (serverList , key );
93
100
if (server .isPresent ()) {
94
101
return server .get ();
0 commit comments