几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx
- 文档编号:17624880
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:11
- 大小:484.17KB
几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx
《几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx》由会员分享,可在线阅读,更多相关《几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
spring-webmvc<
2.5.6<
com.caucho<
hessian<
3.1.3<
burlap<
2.1.12<
服务端配置步骤
1.Web.xml配置
Hessian是基于servlet分发响应的,所以要配置servlet寻址模式,具体配置如下:
<
!
--Hessian配置-->
servlet>
servlet-name>
remoting<
/servlet-name>
servlet-class>
org.springframework.web.servlet.DispatcherServlet<
/servlet-class>
init-param>
param-name>
contextConfigLocation<
/param-name>
param-value>
/WEB-INF/classes/remoting-servlet.xml<
/param-value>
/init-param>
load-on-startup>
1<
/load-on-startup>
/servlet>
servlet-mapping>
url-pattern>
/remoting/*<
/url-pattern>
/servlet-mapping>
其中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"
>
beans
xmlns="
http:
//www.springframework.org/schema/beans"
xmlns:
xsi="
//www.w3.org/2001/XMLSchema-instance"
p="
//www.springframework.org/schema/p"
xsi:
schemaLocation="
//www.springframework.org/schema/beanshttp:
//www.springframework.org/schema/beans/spring-beans-2.5.xsd"
<
--本地业务实现类-->
beanid="
remotiService"
class="
com.xxx.impl.RemoteServiceTest"
autowire="
byName"
/>
--Hessian远程服务-->
beanname="
/hessianService"
org.springframework.remoting.caucho.HessianServiceExporter"
propertyname="
service"
ref="
serviceInterface"
value="
com.xxx.inter.IRemoteServiceTest"
/bean>
--HttpInvoker远程服务-->
/httpService"
org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"
--Burlap远程服务-->
/burlapService"
org.springframework.remoting.caucho.BurlapServiceExporter"
--RMI远程服务类-->
serviceExporter"
org.springframework.remoting.rmi.RmiServiceExporter"
/>
--定义服务名-->
serviceName"
rmi"
--定义服务端口-->
registryPort"
8088"
/beans>
这里的本地业务实现类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远程调用配置-->
hessianService"
org.springframework.remoting.caucho.HessianProxyFactoryBean"
serviceUrl"
TestHessian"
name="
com.xxx.action.TestHessian"
byType"
scope="
prototype"
--RMI远程调用配置-->
rmiService"
org.springframework.remoting.rmi.RmiProxyFactoryBean"
rmi:
//:
8088/rmi"
lookupStubOnStartup"
true"
/property>
refreshStubOnConnectFailure"
cacheStub"
TestRMI"
com.xxx.action.TestRmi"
这个配置里边就定义了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)如下:
importorg.apache.log4j.Logger;
/**
*@authorAdministrator
*
*/
publicclassTestRmiextendsActionSupport{
privatestaticLoggerlogger=Logger.getLogger(TestRmi.class);
privateIRemoteServiceTestrmiService;
publicStringexecute()throwsException{
resultString=rmiService.sayHello();
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/17624880.html