用java实现简单url负载均衡以及容错
2006-09-13 14:32
1071 查看
公司的服务器经常出问题,只好写了一个负载均衡器(无法安装apache)
package com.sourceware.httploadbalance;
import java.util.Hashtable;
import java.util.Collection;
import java.util.Iterator;
/** * <p>Title: 负载均衡器</p> * * <p>Description: </p> *
* <p>Copyright: Copyright (c) 2006</p>
* * <p>Company: </p> * * @author 黑山
* @version 1.0
*/ public class Dispatcher {
private java.util.Hashtable allClienct = new Hashtable(); //负载均衡地址; private Collection allHTTPURLs; //一旦所有均衡都无法工作时的地址; private Collection allBackURLs;
private Collection allLiveURLs;
private int refreshSeconds = 60; private static long latestCheckTime = 0;
private String page600 = "600.html";
private String page601 = "601.html";
private String page602 = "602.html";
private String page603 = "603.html";
private String page604 = "604.html";
private Dispatcher() { allHTTPURLs = new java.util.ArrayList();
allBackURLs = new java.util.ArrayList();
int lbsize = Integer.parseInt(com.sourceware.util.ConfigProperties. getProperty("lb.size"));
int backupsize = Integer.parseInt(com.sourceware.util.ConfigProperties.getProperty("backup.size"));
for (int i = 0; i < lbsize; i++) {String s = com.sourceware.util.ConfigProperties.getProperty("work" +i);
if (s != null && s.trim().length() != 0) {allHTTPURLs.add(s);
}}
for (int i = 0; i < backupsize; i++) {String s = com.sourceware.util.ConfigProperties.getProperty("backup" +i);
if (s != null && s.trim().length() != 0) {
allBackURLs.add(s);
}}refreshSeconds = Integer.parseInt(com.sourceware.util.ConfigProperties.getProperty("refresh.seconds"));
}private static Dispatcher dis = new Dispatcher();public static Dispatcher getInstance() {return dis;}
public String route() {
if (System.currentTimeMillis() - latestCheckTime >refreshSeconds * 1000) {checkURLs();
}//随机挑一个地址;然后检测地址是否可用;如可用则返回该地址;
if (allLiveURLs.size() == 0) {if (allBackURLs.size() == 0) {return page601;
}
int random = (int) java.lang.Math.random() *allBackURLs.size();
String url = (String) allBackURLs.toArray()[random];
return url;}int random = (int) java.lang.Math.random() *allLiveURLs.size();
System.out.println(allLiveURLs.size() + ":" + random);
String url = (String) allLiveURLs.toArray()[random];
if (isLive(url)) {
return url;
} else {
checkURLs();
if (allLiveURLs.size() == 0) {
random = (int) java.lang.Math.random() *allBackURLs.size();
url = (String) allBackURLs.toArray()[random];
return url;
}random = (int) java.lang.Math.random() *allLiveURLs.size();
url = (String) allLiveURLs.toArray()[random];
return url;}}
public static void main(String[] args) {
String url = Dispatcher.getInstance().route();
System.out.println(url);}private void checkURLs() {allLiveURLs = new java.util.ArrayList();
Iterator it = allHTTPURLs.iterator();
while (it.hasNext()) {String url = (String) it.next();
if (isLive(url)) {
allLiveURLs.add(url);
System.out.println("check true:" + url);
}}}
private boolean isLive(String url) {for (int i = 0; i < 3; i++) {try {java.net.HttpURLConnection urlconn = (java.net.HttpURLConnection)new java.net.URL(url).openConnection();
int code = urlconn.getResponseCode();
if (code == 200) {return true;
}} catch (Exception ex) {}}return false;}}
config.properties
refresh.seconds=60
lb.size=1
backup.size=1
work0=http://sms.i6688.com
backup0=http://www.i6688.com:8080/cmvptest.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%String url = com.sourceware.httploadbalance.Dispatcher.getInstance().route();
out.println("<script>");
out.println("window.location='"+url+"'");
out.println("</script>");
%>
相关文章推荐
- KMP算法的简单总结以及java代码实现
- 公钥和私钥的含义,以及java客户端和服务器之间进行安全加解密的简单实现
- Java实现多线程下载 URL以及URLConnection
- javaweb之Session实现简单的购物(URL重写。Cookie重写指定有效日期)和简单的验证结论
- Java多线程的简单实现以及耗时操作的效率对比
- redis java客户端Jedis 实现 连接池 + 简单的负载均衡
- 常见的简单负载均衡算法以及Java实现
- java基础:Web服务器原理 以及 用java简单实现
- Java实现常用简单负载均衡(LoadBalance)
- java多线程理解 以及java实现的简单的死锁
- java 七牛云简单上传文件以及返回url
- 简单选择排序的Java实现、性能分析以及适用场景
- 常见的简单负载均衡算法以及Java实现
- JavaWeb中的一些简单操作(四) 页面间的跳转的本质以及url乱码问题解决
- java发送邮件简单实现以及原理(亲…
- java 通过 URL 类和 URLConnection类 以及输入流实现文件下载功能
- Java解决在浏览器地址栏中输入url访问action的问题以及拦截方法过滤的简易实现
- java多线程以及java网络编程实现简单的聊天系统
- java实现简单文件复制(文件上传)以及springMVC中上传文件方式
- salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)