spring远程调用

一、Spring 远程调用概览

1、把一个应用的某些可用功能发布为远程服务并提供给其他应用来使用,我们需要将这个应用接口的基本功能发布为远程服务。

 

2、spring 支持几种不同的RPC模型 包括

rmi,不考虑网络限制时,访问/发布基于java的服务(很难穿越防火墙,这是因为rmi使用任意端口来交互)

hessian,burlap, 考虑网络限制时,通过http访问/发布基于java的服务

http invoker,考虑网络限制,并希望使用基于xml 或专有的java序列化机制时,访问/发布基于spring的服务

jax-rpc 和 jax-ws 访问/发布平台中立的,基于soap的web服务。

 

3、所有的模型中,远程服务被代理,所以他们能够像其他spring bean 一样被装配到客户端代码中。远程调用会抛出remoteAccessException 异常。

 

二、使用RMI

(1)配置RMI服务: RmiServiceExporter 可以将任意一个Spring管理的Bean发布为RMI服务。RmiServiceExporter通过将一个bean 包装到服务适配中,并将服务适配器绑定到RMI注册表中。从而将POJO转换为RMI服务。

<bean class = "org.springframework.remoting.rmi.RmiSeriviceExporter"

p:service-ref = "spitterService"

p:serviceName = "SpitterService"

p:serviceInterface = "接口全命名"

p:registryHost = “rmi.spitter.com”

p:registryPort = "1199" />

 

(2) 装配RMI 

Spring的RmiProxyFactoryBean是一个工厂bean,该bean可以为rmi服务创建代理。使用RmiProxyFactoryBean引用一个SpitterService的RMI服务是非常简单的

<bean id = "spitterService" class = "org.springframework.remoting.rmi.RmiProxyFactoryBean" p:serviceUrl = "rmi://localhost/spitterService" 

p:serviceInterface = "com.habuma.spitter.service.SpitterService"> 

 

三、使用hessian 和 burlap 发布远程服务 : 是基于http的轻量级远程服务解决方案。hession的消息是二进制的,而burlap的消息是xml。

 

四、使用spring的httpinvoker ,由于rmi使用java标准的对象序列化机制,但是很难穿透防火墙。而hession和burlap能很好地穿透防火墙,但是使用私有的对象序列化机制。

1、把bean导出为http invoker服务,我们需要使用httpinvokerserivceeExporter

<bean class = "org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"

p:service-ref = "spitterService"

p:serviceInterface="com.habuma.spitter.service.SpitterService">

 

2、httpinvokerserivceeExporter 是一个Spring MVC控制器。所以我们需要建立一个url处理器。映射http url到对应的服务器上。

<bean id = "urlMapping" class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

   <property name = "mappings">

      <value>

       /spitter.service = httpInvokerSpitterService

      </value>

    </property>

</bean>

 

你可能感兴趣的:(spring远程调用)