一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Java加权负载均衡策略如何实现 Java加权负载均衡策略实现代码示例

时间:2020-03-31 编辑:袖梨 来源:一聚教程网

本篇文章小编给大家分享一下Java加权负载均衡策略实现代码示例,文章中代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。

加权轮询

后端集群每台机器都分配一个权重,权重高得会承担更多的流量,相反权重低的分配的流量也会少,这种策略允许后端集群机器配置差异化。

java实现

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.stereotype.Controller;

@Controller
public class IpMapController extends LogBaseController implements Runnable {
  private static Integer pos = 0;

  // 待scp的Ip列表,Key代表Ip,Value代表该Ip的权重
  public static HashMap serverWeightMap = new HashMap();

  static {
  	serverWeightMap.put("127.0.0.1", 1);
  	serverWeightMap.put("127.0.0.2", 1);
  	serverWeightMap.put("127.0.0.3", 1);
  	serverWeightMap.put("127.0.0.4", 1);
  }

  public void run() {
  	// 重建一个Map,避免服务器的上下线导致的并发问题
  	Map serverMap = new HashMap();
  	serverMap.putAll(serverWeightMap);

  	// 取得Ip地址List
  	Set keySet = serverMap.keySet();
  	Iterator iterator = keySet.iterator();

  	// 根据权重组成iplist
  	List serverList = new ArrayList();
  	while (iterator.hasNext()) {
  		String server = iterator.next();
  		int weight = serverMap.get(server);
  		for (int i = 0; i < weight; i++)
  			serverList.add(server);
  	}

  	String server = null;
  	synchronized (pos) {
  		if (pos >= keySet.size()){
  			pos = 0;
  		}
  			
  		server = serverList.get(pos);
  		System.out.println("server:" + server + ",pos=" + pos);
  		pos++;
  	}
  	
  }

  public static void main(String[] args) {
  	 IpMapController ipRunnable = new IpMapController();

  	for (int i = 0; i <= 10; i++) {
  		System.out.println("t" + i);
  		new Thread(ipRunnable).start();
  	}
  }
}

多线程输出结果

t0

t1

t2

t3

t4

t5

t6

server:127.0.0.4,pos=0

server:127.0.0.3,pos=1

server:127.0.0.2,pos=2

server:127.0.0.2,pos=2

t7

server:127.0.0.4,pos=0

server:127.0.0.3,pos=1

t8

server:127.0.0.2,pos=2

server:127.0.0.2,pos=2

t9

server:127.0.0.4,pos=0

t10

server:127.0.0.3,pos=1

server:127.0.0.2,pos=2

热门栏目