从spring 配置文件中 设置 每台服务器的 权重, 或者 在 .properties 中设置 ,进行热部署,,,,
public class WeightAllot implements Allot
{
protected static Logger logger = LoggerFactory.getLogger(WeightAllot.class);
@Resource
private AoigwService aoigwService;
// 该字符串为逗号分割的数字 格式如:1,2,3
private String weights;
/** 数据库中的AOG列表 */
List<AoiGw> aoigwlist = null;
/** 每个AOG的权值 */
int[] aoiws;
/**
* 总权值
*/
static int num = 0;
@Override
public void afterPropertiesSet() throws Exception
{
aoigwlist = aoigwService.findAll();
String[] ws = weights.replaceAll(",", ",").replaceAll(" ", "").trim().split(",");
aoiws = new int[aoigwlist.size()];
for (int i = 0; i < aoiws.length; i++)
{
aoiws[i] = 1;
if (i < ws.length)
{
try
{
aoiws[i] = Integer.parseInt(ws[i]);
}
catch (Exception e)
{
}
}
num += aoiws[i];
}
logger.info("aogdns Allot: aogNode = " + aoigwlist.size() + ", weightStr = " + weights + ", sum = " + num);
}
public AoiGw getAoiGw(String lid)
{
// 先取LID后8位转成INT值,然后与权值和取模
long ai = 1;
try
{
String s = lid.substring(lid.length() - 8, lid.length());
ai = Long.parseLong(s, 16);
}
catch (Exception e)
{
logger.warn("", e);
}
int mod = (int) (ai % num);
int temp = 0;
AoiGw result = aoigwlist.get(0);
for (int i = 0; i < aoiws.length; i++)
{
temp += aoiws[i];
if (mod < temp)
{
result = aoigwlist.get(i);
break;
}
}
if (logger.isDebugEnabled())
logger.debug("lid:" + lid + ", mod: " + mod + ", serverId: " + result.getAoiId());
return result;
}
public String getWeights()
{
return weights;
}
public void setWeights(String weights)
{
this.weights = weights;
}
public AoigwService getAoigwService()
{
return aoigwService;
}
public void setAoigwService(AoigwService aoigwService)
{
this.aoigwService = aoigwService;
}
public static void main(String[] args)
{
try
{
Configuration.init("applicationContext.xml");
}
catch (Exception e)
{
e.printStackTrace();
}
Allot allot = Configuration.getInstance().getAllot();
for (int i = 0; i < 50; i++)
{
int tmp = new Random().nextInt(Integer.MAX_VALUE);
System.out.println(" num: " + num + ", people: " + tmp + ", id: "
+ allot.getAoiGw(MseqUtil.toHex((int) tmp)).getAoiId());
}
System.exit(1);
}
}
package Java2014.java20141102;
import java.util.ArrayList;
import java.util.List;
public class OtherCategary {
static int num =6 ;
static int[] aoiws = {2,0,3,1};
/**
* <pre>
* 1 0 1
* 1 2 3
* 1 3 4
* 1 0 1
* 1 2 3
* 1 2 3
* </pre>
* 标记 flag 第一次 flag = 0 ;
* 注册一次 用户后 flag 偏移一位 ,flag++ ; flag = (flag >= aoiws.length?0:flag);
* if(reaoiws[flag]<aoiws[flag]) {} else { continue;}
* for (i< max )
*
* j if(reaoiws[flag] < aoiws[flag]) reaoiws[flag]++; flag++;flag = (flag >= aoiws.length?0:flag);
*
*
*/
static int[] reaoiws = null;
static List aoigwlist = null;
static int currIndex = 0;
static {
aoigwlist = new ArrayList<Integer>();
aoigwlist.add(1);
aoigwlist.add(2);
aoigwlist.add(3);
aoigwlist.add(4);
reaoiws = new int[aoigwlist.size()];
}
public static Integer getAoiGw(Integer ai) {
Integer result = (Integer) aoigwlist.get(0);
if(ai % num == 0) {currIndex = 0;reaoiws = null;reaoiws = new int[aoigwlist.size()];}
for (int i = 0; i < aoiws.length; i++) {
if(reaoiws[currIndex] < aoiws[currIndex]){
reaoiws[currIndex]++;
result = (Integer) aoigwlist.get(currIndex);
currIndex = (currIndex >= aoiws.length-1 ? 0 : currIndex+1);
break;
}else{
currIndex = (currIndex >= aoiws.length-1 ? 0 : currIndex+1);
}
}
return result;
}
public static void main(String[] args) {
for (int i = 0; i < 40; i++) {
if(i%6==0) System.out.println ( );
// try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
System.out.print ( getAoiGw(i) +" ");
}
}
}
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!