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

org.caiguoqing.uyuni.common.Consumer Maven / Gradle / Ivy

The newest version!
/**
 * 
 */
package org.caiguoqing.uyuni.common;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.caiguoqing.uyuni.config.ConsumerConfig;
import org.caiguoqing.uyuni.config.ProtocolConfig;
import org.caiguoqing.uyuni.config.RegistryConfig;
import org.caiguoqing.uyuni.registry.RegistryService;
import org.caiguoqing.uyuni.rpc.client.socketclient.SocketClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author caiguoqing0427
 *
 */
public class Consumer {
	private Logger logger = LoggerFactory.getLogger(getClass());
	private List list;
	private RegistryService registry;
	private RegistryConfig registryConfig;
	private ProtocolConfig protocolConfig;
	private Map refers = new HashMap();
	private Map ids = new HashMap();
	
	/**
	 * @param list list
	 * @param registryConfig registryConfig
	 * @param protocolConfig protocolConfig
	 */
	public Consumer(List list, RegistryConfig registryConfig, ProtocolConfig protocolConfig) {
		this.list = list;
		this.registryConfig = registryConfig;
		this.protocolConfig = protocolConfig;
	}
	
	private boolean check(){
		if(list == null || list.size() == 0 || registryConfig == null
			|| protocolConfig == null){
			return false;
		}
		return true;
	}
	
	private void registryInit(){
		String address = registryConfig.getAddress();
		int pos = address.indexOf(":");
		String host = address.substring(0, pos);
		int port = Integer.parseInt(address.substring(pos+1));
		try {
			logger.info("connect registry at " + address);
			registry = SocketClient.getInstance().refer(
				RegistryService.class,host,port);
			logger.info("registry is available");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void init(){
		if(!check()){
			return;
		}
		if(registry == null){
			registryInit();
		}

		for(ConsumerConfig config : list){
			logger.info("connect to "+config.getInter());
			List ps = registry.getService(config.getInter());
			if(ps == null || ps.size() == 0){
				logger.error("get " + config.getInter() + " fail");
				continue;
			}
			logger.info("get service at " + ps.get(0));
			URL url = null;
			try {
				url = new URL(ps.get(0));
			} catch (MalformedURLException e1) {
				e1.printStackTrace();
				continue;
			}
			String host = url.getHost();
			int port = url.getPort();
			Class clazz;
			try {
				clazz = Class.forName(config.getInter());
				Object object = SocketClient.getInstance().refer(clazz,host,port);
				refers.put(config.getInter(), object);
				ids.put(config.getId(), config.getInter());
			} catch (ClassNotFoundException e) {
				logger.error(config.getInter()+" not found");
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	public Object getInstance(String inter){
		return refers.get(inter);
	}
	
	public Object getInstanceById(String id){
		return getInstance(ids.get(id));
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy