APP下载

一种高性能的HTTP接口服务设计与实现

2013-06-08贾晨王为达

中国信息化·学术版 2013年2期
关键词:调用代码名称

贾晨 王为达

2 系统实现

2.1 接口动态加载

为方便动态加载接口逻辑,每个接口都使用独立类实现,通过Java注解和反射机制实现动态加载。注解定义如下,用于描述接口信息:

@Retention(RetentionPolicy.RUNTIME)

public @interface InterfaceConfig{

public String name(); // 接口名称

public int size() default 0; // 接口最大并发数

public long timeOut() default 30*1000;} // 接口执行超时时间

这里通过注解描述了接口名称、最大并发数、超时时间等,然后通过Java的反射机制动态加载接口信息。代码片断如下:

ConcurrentHashMap> configMap=newConcurrentHashMap>();

Set> classes = PackageUtilAdv.getClasses(CLASS_PATH);// 获取CLASS_PATH下所有类文件

for(Class clazz : classes) {

if(clazz.isAnnotationPresent(InterfaceConfig.class)) {// 获取接口类对应的注解信息

Annotation annotation = clazz.getAnnotation(InterfaceConfig. class);

InterfaceConfig descr = (InterfaceConfig)annotation;

Mapprop=new HashMap();

int concurrentSize = descr.size();

prop.put("InterfaceConfig", descr);

prop.put("interfaceClass", clazz);

configMap.put(descr.name(), prop);}}

2.2 接口调用过程

当用户端请求到达接口代理时,由代理类调用实际的接口逻辑并返回结果,代码如下:

private JSONObject invokeProcess(Map map, String interfaceName, HttpServletRequest request, HttpServletResponse response) throws Exception {// 接口对应实际的Class

Class clazz = (Class) map.get("interfaceClass");

Object obj = objectMap.get(interfaceName);

if (obj == null) {

obj = clazz.newInstance();

objectMap.put(interfaceName, obj);}

// 调用接口实现的doProcess方法执行接口逻辑

Method m=clazz.getMethod("doProcess",newClass[]{HttpServletRequest.class, HttpServletResponse.class});

JSONObject data = (JSONObject) m.invoke(obj, new Object[]{request, response});

return data;}

3 性能测试

在Linux下部署并测试程序,监听8090端口,如图3.1所示。

猜你喜欢

调用代码名称
基于Android Broadcast的短信安全监听系统的设计和实现
神秘的代码
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
沪港通一周成交概况
沪港通一周成交概况
沪港通一周成交概况
沪港通一周成交概况
近期连续上涨7天以上的股
利用RFC技术实现SAP系统接口通信