几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试.docx
- 文档编号:4689974
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:11
- 大小:484.17KB
几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试.docx
《几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试.docx》由会员分享,可在线阅读,更多相关《几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试.docx(11页珍藏版)》请在冰豆网上搜索。
几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试
Spring2.5、Hessian3.1.3、RMI集成
首先下载Hessian及Spring需要的jar,Maven地址如下:
服务端配置步骤
1.Web.xml配置
Hessian是基于servlet分发响应的,所以要配置servlet寻址模式,具体配置如下:
--Hessian配置-->
其中remoting是http请求地址的匹配描述,也就是URL中包含/remoting/模式的时候就会被org.springframework.web.servlet.DispatcherServlet接管处理,进而由通过Hessian接口开放的服务响应。
contextConfigLocation配置远程接口配置文件所在的位置。
2.Hessian、Burlap、Httpinvoker、RMI开放服务接口配置
这个文件的命名和web.xml中Servlet配置密切相关,如果web.xml中servlet-mapping中的servlet-name是remoting,则这个配置文件名字就必须是remoting-servlet.xml,而且必须放置在src根目录下,也就是编译后会放置在WEB-INF下。
针对该示例的配置文件是remoting-servlet.xml,详细内容如下:
xmlversion="1.0"encoding="UTF-8"?
>
xmlns="http: //www.springframework.org/schema/beans" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xmlns: p="http: //www.springframework.org/schema/p" xsi: schemaLocation="http: //www.springframework.org/schema/beanshttp: //www.springframework.org/schema/beans/spring-beans-2.5.xsd"> --本地业务实现类--> --Hessian远程服务--> --HttpInvoker远程服务--> --Burlap远程服务--> --RMI远程服务类--> --定义服务名--> --定义服务端口-->
这里的本地业务实现类bean就是实现远程调用接口的实现类,Hessian、Brulap、Httpinvoker远程服务bean就是通过http(POST)响应的代理类,必须将业务bean和对应的接口类作为属性注入到该bean中(这三种远程控制接口的配置和使用方法完全一样,只要基于各自的Exporter类就可以)。
RMI远程服务类是响应远端RMI请求的代理bean,必须将本地业务实现类、调用接口类、服务名称、服务端口等属性注入。
3.提供给远端调用的接口编写
通常只需要对已经完成的服务端代码稍加修改就可以实现通过Hessian、Brulap、Httpinvoker、RMI等协议对外提供远程访问的功能,因为Hessian、Brulap、Httpinvoker、RMI等是通过接口实现对外开放类及方法的访问控制的,所以在提供远程访问前需要先定义一个接口,该接口定义对外开放的方法,然后让相应的服务实现该接口。
例如上例中对应的接口IHessianTest.java内容如下:
packagecom.xxx.inter;
publicinterfaceIRemoteServiceTest{
publicStringsayHello();
}
该接口的实现类HessianTest.java如下:
packagecom.xxx.impl;
importcom.xxx.inter.IRemoteServiceTest;
publicclassRemoteServiceTestimplementsIRemoteServiceTest{
@Override
publicStringsayHello(){
return"远程调用返回值";
}
}
客户端配置及调用
1.将Hessian、Brulap、Httpinvoker、RMI提供的接口java(IRemoteServiceTest.java)复制到该项目的src中。
2.进行Spring配置,这里使用spring注入的方式将Hessian、Brulap、Httpinvoker、RMI接口注入到需要远程调用的客户端bean里边,配置文件(applicationContext.xml)如下:
--Hessian远程调用配置-->
--RMI远程调用配置--> //: 8088/rmi"/> 这个配置里边就定义了Hessian、Brulap、Httpinvoker接口的访问URL和对应的接口,并将定义好的bean注入到客户端的actionbean中。 RMI的配置和Hessian类似,还可以设置一些辅助参数,用来强化客户端连接服务端的性能。 在部署RMI的时候要注意Linux下双IP的问题,因为RMI调用方式是先将请求发送到服务端,服务端将服务器的IP(或者hostname)返回给客户端,客户端再根据返回的地址将后续请求发送到服务端,这样如果服务端没有对hostname和回路IP进行设置,有可能会返回127.0.0.1,这样客户端就会连接失败,鉴于这样的原来,必须设置服务端的hostmame,可以通过如下命令进行: 1.hostname看看服务端的名称,最好是一个域名; 2.hostname–i看看服务器IP,如果是127.0.0.1就必须将服务器hostname对应的host设置为服务器的实际IP,即修改/etc/hosts 3.执行sh/etc/init.d/networkrestart使得配置生效 4.重新启动JBosss等web容器,看到Bindingservice'rmi'toRMIregistry: RegistryImpl[UnicastServerRef[liveRef: [endpoint: [: 8088](local)日志就说明RMI绑定成功 5.在客户端服务器设置/etc/host,使得服务端的域名对应到其IP 客户端调用Hessian接口方法示例(TestHessian.java)如下: packagecom.xxx.action; importcom.xxx.inter.IRemoteServiceTest; importcom.opensymphony.xwork2.ActionSupport; publicclassTestHessianextendsActionSupport{ privateIRemoteServiceTesthessianService; privateStringresultString; publicStringhessian()throwsException{ resultString=hessianService.sayHello(); returnSUCCESS; } publicStringgetResultString(){ returnresultString; } publicvoidsetHessianService(IRemoteServiceTesthessianService){ this.hessianService=hessianService; } } 其中hessianService是通过spring注入的Hessian接口,通过注入的这个接口就可以调用远程的方法了。 客户端调用RMI接口方法示例(TestRmi.java)如下: packagecom.xxx.action; importorg.apache.log4j.Logger; importcom.xxx.inter.IRemoteServiceTest; importcom.opensymphony.xwork2.ActionSupport; /** *@authorAdministrator * */ publicclassTestRmiextendsActionSupport{ privatestaticLoggerlogger=Logger.getLogger(TestRmi.class); privateStringresultString; privateIRemoteServiceTestrmiService; publicStringgetResultString(){ returnresultString; } @Override publicStringexecute()throwsException{ resultString=rmiService.sayHello(); returnSUCCESS; } publicvoidsetRmiService(IRemoteServiceTestrmiService){ this.rmiService=rmiService; } } 其中rmiService是通过spring注入的RMI接口,通过注入的这个接口就可以调用远程的方法了。 对比测试结果 针对本地调用、httpclient调用远程服务、hessian调用远程服务做了一个例子并进行了压力测试,测试结果如下: 图表1本地访问 图表2httpclient远程调用 图表3hessia远程调用 图表4RMI远程调用 图表5Httpinvoker远程调用 图表6Burlap远程调用 理论上速度最快的是本地调用,次之是RMI、Hessian、Httpinvoker、Brulap,最慢的是httpclient。 但是可能因为网络及服务器新能波动造成实际的测试结果如上,仅作为参考。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Spring2 远程 调用 方式 RMIHessianBurlapHttpinvokerhttpclient 对比 测试
链接地址:https://www.bdocx.com/doc/4689974.html