All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.javaclub.configcenter.client.ConfigServer Maven / Gradle / Ivy

There is a newer version: 2.2.0
Show newest version
package com.github.javaclub.configcenter.client;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSONObject;
import com.github.javaclub.configcenter.client.util.DESCoder;
import com.github.javaclub.configcenter.client.util.HttpHelper;
import com.github.javaclub.configcenter.client.util.Utils;

public class ConfigServer {
	
	private static final Logger logger = LoggerFactory.getLogger(ConfigServer.class);
	private static ConfigServer instance = new ConfigServer();
	private String endpoint;  // 初始ip
	private String appid;
	private String appkey;
	private volatile List serverList;
	private AtomicBoolean inited = new AtomicBoolean(false);
	private String env;
	private AtomicInteger rid = new AtomicInteger();
	
	public static final int CONFIG_SERVER_PORT = 7001; // 配置中心端口号
	
	private ConfigServer(){
	}
	
	public static ConfigServer getInstance(){
		return instance;
	}
	
	public String getOneServer() {
		List tmp = serverList;
		if (tmp != null && tmp.size() != 0) {
			int index = rid.getAndIncrement();
			if (index > Integer.MAX_VALUE - 1000) {
				rid.set(0);
			}
			return tmp.get(index % tmp.size());
		}
		return endpoint;
	}
	
	public synchronized void init(){
		if(!inited.get() && !"dev".equals(env)) {
			if("online".equals(env)) {
				serverList = new ArrayList();
				serverList.add("10.117.45.53:7001");
				serverList.add("10.171.241.33:7001");
			}
			Thread t = new Thread(new Runnable() {
				@Override
				public void run() {
					while(true){
						try{
							Thread.sleep(5000L);
							getServers();
						}catch(Throwable t){
							logger.error("", t);
						}
					}
				}});
			t.setDaemon(true);
			t.setName("check-config-server");
			t.start();
			inited.set(true);
		}
	}
	
	private void getServers() {
		if(StringUtils.isBlank(appid)) {
			return ;
		}
		StringBuilder sb = new StringBuilder();
		sb.append("http://");
		String ip = getOneServer();
		sb.append(ip != null ? ip : endpoint);
		sb.append("/configcenter/status/iplist/query?clientVer=")
			.append(Utils.getConfigClientVer())
			.append("&");
		sb.append("appid=" + appid);
		try {
			String resp = HttpHelper.get(sb.toString());
			if(StringUtils.isNotBlank(resp)) {
				JSONObject result = JSONObject.parseObject(resp);
				if(result.getShort("code") == 0) {
					if(StringUtils.isNotBlank(result.getString("result"))) {
						String v = DESCoder.decrpty(result.getString("result"), appkey);
						@SuppressWarnings("unchecked")
						List list = JSONObject.parseObject(v, List.class);
						if(list != null){
							serverList = list;
						}
					}
				} else {
					logger.error("failed to getServers:" + resp);
				}
			}
		} catch (Exception e) {
			logger.error("",e);
		}
	}
	
	public void setEndPoint(String endpoint){
		this.endpoint = endpoint;
	}


	public void setAppid(String appid) {
		this.appid = appid;
	}

	public void setAppkey(String appkey) {
		this.appkey = appkey;
	}

	public void setEnv(String env) {
		this.env = env;
	}
	
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy