package com.alibaba.dubbo.rpc.benchmark; | |
import java.util.concurrent.ConcurrentHashMap; | |
import com.alibaba.dubbo.config.ApplicationConfig; | |
import com.alibaba.dubbo.config.ReferenceConfig; | |
/** | |
* Abstract Service Factory,create custom nums Service | |
* | |
* @author tony.chenl | |
*/ | |
public class ServiceFactory<T> { | |
String targetIP = null; | |
int targetPort = 0; | |
int connectTimeout = 0; | |
int clientNums = 0; | |
public String getTargetIP() { | |
return targetIP; | |
} | |
public void setTargetIP(String targetIP) { | |
this.targetIP = targetIP; | |
} | |
public int getTargetPort() { | |
return targetPort; | |
} | |
public void setTargetPort(int targetPort) { | |
this.targetPort = targetPort; | |
} | |
public int getConnectTimeout() { | |
return connectTimeout; | |
} | |
public void setConnectTimeout(int connectTimeout) { | |
this.connectTimeout = connectTimeout; | |
} | |
public int getClientNums() { | |
return clientNums; | |
} | |
public void setClientNums(int clientNums) { | |
this.clientNums = clientNums; | |
} | |
// Cache ExchangeClient | |
private static ConcurrentHashMap<String, Object> services = new ConcurrentHashMap<String, Object>(); | |
@SuppressWarnings("unchecked") | |
public T get(final Class<T> cls){ | |
String key = cls.getName(); | |
if (services.containsKey(key)) { | |
return (T) services.get(key); | |
} else { | |
T service = createClient(cls, targetIP, targetPort, connectTimeout,clientNums); | |
services.put(key, service); | |
return (T) services.get(key); | |
} | |
} | |
protected T createClient(Class<T> cls, String targetIP, int targetPort, int connectTimeout,int clientNums){ | |
ReferenceConfig<T> referenceConfig = new ReferenceConfig<T>(); | |
referenceConfig.setInterface(cls); | |
StringBuilder url = new StringBuilder(); | |
url.append("dubbo://"); | |
url.append(targetIP); | |
url.append(":"); | |
url.append(targetPort); | |
url.append("/"); | |
url.append(cls.getName()); | |
referenceConfig.setUrl(url.toString()); | |
// hardcode | |
referenceConfig.setConnections(clientNums); | |
ApplicationConfig application = new ApplicationConfig(); | |
application.setName("dubbo_consumer"); | |
referenceConfig.setApplication(application); | |
referenceConfig.setTimeout(connectTimeout); | |
return referenceConfig.get(); | |
} | |
} |