权重轮询调度算法(Weighted Round-Robin Scheduling)--java版本
由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
2个java源文件,如下所示:
public interface IProduceStrategy {
public int getPartitionIdForTopic();
}
public class WeightFactorProduceStrategy implements IProduceStrategy {
private int i = -1; //表示上一次选择的服务器
private int cw = 0; //表示当前调度的权值
private int gcd = 0; //当前所有权重的最大公约数 比如 2,4,8 的最大公约数为:2
private int maxWeight;
private List weights = null; //作用计算最大公约数
private PartitionWeightRRParameter weightRRParametersDns[] = null;
/**
* 按照轮询调研权重配置,格式如下:partition1:weight,partition2:weight
* @param partConfig
*/
public WeightFactorProduceStrategy(String partConfig) {
validate(partConfig);
this.initWeigthParam(Tools.parseCsvMap(partConfig));
}
private Pattern pattern = Pattern.compile("([\\d+\\:\\d+],?){1,}");
private void validate(String partConfig) {
if (partConfig.length() <= 0)
throw new InvalidPartitonConfigException("partition config is incorrect :" + partConfig);</