blob: b699b0e5f4f86d7c40359cd994afdaeb15996b93 [file] [log] [blame]
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();
}
}