一、在项目中已经有三个单独的服务提供者,并实现的ribbon的负载均衡
二、 ribbon默认的负载均衡是随机的
1.在客户端编写myrule
2. GuoRandomRule继承AbstractLoadBalancerRule对随机算法进行修改
public class GuoRandomRule extends AbstractLoadBalancerRule {
public GuoRandomRule() {
}
private int total = 0;
private int currentIndex = 0;
@SuppressWarnings({"RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE"})
public Server choose(ILoadBalancer lb, Object key) {
if (lb == null) {
return null;
} else {
Server server = null;
while(server == null) {
if (Thread.interrupted()) {
return null;
}
List<Server> upList = lb.getReachableServers();
List<Server> allList = lb.getAllServers();
int serverCount = allList.size();
if (serverCount == 0) {
return null;
}
// int index = this.chooseRandomInt(serverCount);
// server = (Server)upList.get(index);
if(total<5){
server = upList.get(currentIndex);
total++;
}else{
total = 0;
currentIndex++;
if(currentIndex>upList.size()){
currentIndex = 0;
}
server = upList.get(currentIndex);//从或者的服务中,获得指定的服务来操作
}
if (server == null) {
Thread.yield();
} else {
if (server.isAlive()) {
return server;
}
server = null;
Thread.yield();
}
}
return server;
}
}
protected int chooseRandomInt(int serverCount) {
return ThreadLocalRandom.current().nextInt(serverCount);
}
public Server choose(Object key) {
return this.choose(this.getLoadBalancer(), key);
}
public void initWithNiwsConfig(IClientConfig clientConfig) {
}
}
3. 这里只修改了部分代码,实现每个服务提供者访问5次,一共3个服务提供者