package com.hqyg.disjob.rpc.cluster.loadbalance;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import com.hqyg.disjob.rpc.client.HURL;
import com.hqyg.disjob.rpc.cluster.LoadBalance;
/**
*
* @author Disjob
*
*/
public class RoundRobinLoadBalance implements LoadBalance{
private List<HURL> urls;
private static AtomicInteger idx = new AtomicInteger(0);
public RoundRobinLoadBalance( List<HURL> urls){
this.urls = urls;
}
@Override
public void onRefresh(List<HURL> rpcLst) {
}
@Override
public HURL select() {
List<HURL> urlLst = this.urls;
HURL url = null;
if (urlLst.size() > 1) {
url = doSelect();
} else if (urlLst.size() == 1) {
url = urlLst.get(0);
}
if (url != null) {
return url;
}
//throw new RpcServiceException("No available referers for call request:jobName");
return null;
}
protected HURL doSelect() {
int index = idx.incrementAndGet();
for (int i = 0; i < urls.size(); i++) {
HURL url = urls.get((i + index) % urls.size());
if(url.getHost() != null && url.getPhpFilePath() != null){
return url;
}
}
return null;
}
@Override
public void setWeightString(String weightString) {
}
}