几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx

上传人:b****6 文档编号:17624880 上传时间:2022-12-07 格式:DOCX 页数:11 大小:484.17KB
下载 相关 举报
几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx_第1页
第1页 / 共11页
几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx_第2页
第2页 / 共11页
几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx_第3页
第3页 / 共11页
几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx_第4页
第4页 / 共11页
几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx

《几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx》由会员分享,可在线阅读,更多相关《几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

几种Spring2远程调用方式RMIHessianBurlapHttpinvokerhttpclient对比测试Word文件下载.docx

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。

但是可能因为网络及服务器新能波动造成实际的测试结果如上,仅作为参考。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1