LOAD BALANCING
IpPool.java:
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class IpPool {
public static Map<String, Integer> ipMap = new ConcurrentHashMap<>();
static {
ipMap.put("192.168.1.1", 10);
ipMap.put("192.168.1.2", 10);
ipMap.put("192.168.1.3", 10);
ipMap.put("192.168.1.4", 10);
ipMap.put("192.168.1.5", 10);
ipMap.put("192.168.1.6", 10);
ipMap.put("192.168.1.7", 10);
ipMap.put("192.168.1.8", 10);
ipMap.put("192.168.1.9", 10);
ipMap.put("192.168.1.10", 10);
}
}
LoadBalance.java:Interface
public interface LoadBalance {
String getServer(String clientIp);
}
RoundRobin.java:
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class RoundRobin implements LoadBalance {
private static Integer position = 0;
@Override
public String getServer(String clientIp) {
Set<String> servers = IpPool.ipMap.keySet();
List<String> serverList = new ArrayList<>();
serverList.addAll(servers);
String target = null;
synchronized (position) {
if (position > serverList.size() - 1) {
position = 0;
}
target = serverList.get(position);
position++;
}
return target;
}
}
LoadBalanceMain.java:
public class LoadBalanceMain {
public static void main(String[] args) {
run();
}
public static void run() {
loadBalance();
}
public static void loadBalance() {
doGetServer(new RoundRobin());
}
public static void doGetServer(LoadBalance loadBalance) {
doGetServer(loadBalance, 100);
}
private static void doGetServer(LoadBalance loadBalance, int queryTimes) {
for (int i = 0; i < queryTimes; i++) {
String serverId = loadBalance.getServer(String.valueOf(i));
System.out.println(String.format("[%s] index:%s,%s", loadBalance.getClass().getSimpleName(), i, serverId));
}
}
}
Output:



Comments
Post a Comment