Skip to content

关于随机的方式选择服务器节点的疑问 #3

@YeFei572

Description

@YeFei572

hi,master分支下面的随机选择节点有点疑问请教一下:

protected ServerNode doSelect(List<ServerNode> serverNodes) {
    int size = serverNodes.size();
    int[] weights = new int[size];
    int total = 0 ;
    for(int i=0;i<size;i++){
	    Integer weight = serverNodes.get(i).getWeight();
	    total+=weight;
	    weights[i] = total;
    }
    //类似于抽奖算法
    int randomIndex = ThreadLocalRandom.current().nextInt(weights[size - 1]);
    for(int index = 0;index<size;index++){
	    if(randomIndex < weights[index]){
		    return serverNodes.get(index);
	    }
    }
    return serverNodes.get(ThreadLocalRandom.current().nextInt(serverNodes.size()));
}

0客户端的时候启动2个服务节点,此时2个服务节点的权重weight是不是都是0?
如果是的话

    int randomIndex = ThreadLocalRandom.current().nextInt(weights[size - 1]);

这个里面的nextInt一直时0,会报错吧?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions