`
knight_black_bob
  • 浏览: 853318 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

动态策略

    博客分类:
  • java
阅读更多

 

 

 

 

从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捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

分享到:
评论

相关推荐

    用于TSP的基于动态策略的GPU并行蚁群优化

    研究利用了GPU强大的并行处理能力,以期达到比传统CPU计算更快的算法执行效率,并通过动态策略来优化计算资源的利用,以适应不同规模和复杂度的问题,展现了GPU在优化算法中应用的巨大潜力和前景。

    吉林大学操作系统课程设计(基于死锁避免动态策略的资源分配银行家算法的模拟实现)

    吉林大学操作系统课程设计(基于死锁避免动态策略的资源分配银行家算法的模拟实现) 利用Java实现了基本的算法和GUI界面,以及写了实验报告。 如果你成功获取了这个源码,可以联系我的QQ 2904184453来获取完整的实验...

    matlab开发-动态分配策略回顾

    本篇将回顾几种常见的动态策略,包括凸管理(Convex Management)、凹管理(Concave Management)、恒定比例投资组合保险(CPPI)和优化基础投资比例策略(OBPI)。 1. 凸管理与凹管理: 凸管理与凹管理是基于投资...

    策略模式的实现,通过反射

    这样,我们可以通过键来获取对应的策略实例,实现动态策略选择。例如: ```java Map, Strategy&gt; strategyMap = new HashMap(); strategyMap.put("strategyA", new StrategyA()); strategyMap.put("strategyB", new ...

    论文研究-在线收益管理的动态售票策略及竞争分析.pdf

    论文研究-在线收益管理的动态售票策略及竞争分析.pdf, 基于... 同时比较了该类动态策略与一类静态策略的优劣性, 并指出:对于不同的需求序列, 两类策略具有不同的竞争性能.

    基于动态策略的网络视频监控系统 (2015年)

    针对远程视频监控的实时性要求,提出了一个基于动态策略的网络视频监控系统。该系统包括两个部分:基于X264编码器和Live555流媒体服务器的Linux平台网络视频监控系统服务器,以及基于VLC播放器的Windows平台网络视频...

    营销策略动态组合.PPT

    在营销领域,面对高度同质化的市场环境,企业必须采取动态策略组合来建立竞争优势。同质化恶性竞争往往导致价格战、终端战、广告战和促销战,这些短期行为不仅可能导致利润下滑,还可能损害品牌形象。为了打破这种...

    存在策略消费者的动态定价策略

    存在策略消费者的动态定价策略主要关注的是在线零售商如何通过历史价格和预期价格信息来调整其定价策略,以及消费者如何基于这些信息做出购买决策。该策略不仅涉及到零售商的定价灵活性,还涉及到消费者行为的预测,...

    java策略模式示例.zip

    4. 动态策略选择:如何在运行时根据条件选择合适的策略实例。 总的来说,这个"java策略模式示例"是一个很好的学习资源,通过实践可以深入理解策略模式的精髓,提高软件设计能力。在学习过程中,建议动手编写代码,...

    大类配置系列:从未来到现在-动态资产配置策略框架介绍-0515-浙商证券-30页.pdf

    在方法简介部分,文章提到了基于模拟的方法,使用Brandt、Goyal、Santa Clara和Stroud的方法寻找最优动态策略,实现了对整个投资规划期进行过程控制。该方法使用泰勒展开、倒向递归和回归分析,具体流程见正文。 在...

    ASA中的策略NAT

    2. **动态策略NAT(Dynamic Policy NAT)**:与静态策略NAT类似,但转换的全局IP地址是动态分配的。在这种情况下,`access-list`同样用于定义匹配的流量,然后使用`nat`或`global`命令指定地址池,系统会从这个地址...

    基于动态策略的灰度发布系统实践

    基于abtestinggateway的学习研究笔记记录PPT 此外gti有源码和文档

    Java开发模式之策略模式

    上下文在运行时可以通过更改策略对象来改变其行为,这被称为动态策略选择。 4. **客户端代码**:在客户端代码中,根据实际需求选择并实例化相应的策略类,然后通过上下文来调用策略对象的执行方法。这样,客户端...

Global site tag (gtag.js) - Google Analytics