java 带权重轮询算法
import java.util.ArrayList;
import java.util.List;
/**
* 一个实现加权轮询算法的类。
*/
class WeightedRoundRobin {
// 保存权重的服务器节点列表
private volatile List<ServerNode> serverNodes = new ArrayList<>();
/**
* 添加一个服务器节点到列表中。
*
* @param serverNode 要添加的服务器节点
*/
public void addServer(ServerNode serverNode) {
serverNodes.add(serverNode);
}
/**
* 根据当前权重轮询选择一个服务器节点。
*
* @return 返回被选中的服务器节点
*/
public ServerNode getNextServer() {
int totalWeight = 0; // 记录所有节点的总权重
ServerNode maxServerNode = null; // 用于保存当前权重最大的节点
if (null == serverNodes || serverNodes.isEmpty()) {
return maxServerNode;
}
int maxWeight = 0; // 记录当前发现的最大权重
// 遍历所有服务器节点,更新它们的当前权重,并找出当前权重最大的节点
for (int i = 0; i < serverNodes.size(); i++) {
ServerNode n = serverNodes.get(i);
totalWeight += n.getWeight();
// 更新节点的当前权重
n.setCurrentWeight(n.getCurrentWeight() + n.getWeight());
/