Files
2024-06-01 23:13:41 -07:00

45 lines
1.3 KiB
Java

import java.util.List;
public class WeightedRoundRobin {
private List<String> servers;
private List<Integer> weights;
private int currentIndex;
private int currentWeight;
public WeightedRoundRobin(List<String> servers, List<Integer> weights) {
this.servers = servers;
this.weights = weights;
this.currentIndex = -1;
this.currentWeight = 0;
}
public String getNextServer() {
while (true) {
currentIndex = (currentIndex + 1) % servers.size();
if (currentIndex == 0) {
currentWeight--;
if (currentWeight <= 0) {
currentWeight = getMaxWeight();
}
}
if (weights.get(currentIndex) >= currentWeight) {
return servers.get(currentIndex);
}
}
}
private int getMaxWeight() {
return weights.stream().max(Integer::compare).orElse(0);
}
public static void main(String[] args) {
List<String> servers = List.of("Server1", "Server2", "Server3");
List<Integer> weights = List.of(5, 1, 1);
WeightedRoundRobin weightedRoundRobinLB = new WeightedRoundRobin(servers, weights);
for (int i = 0; i < 7; i++) {
System.out.println(weightedRoundRobinLB.getNextServer());
}
}
}