Spring支持几种不同RPC模型,包括远程方法调用(RMI)、Hessian和Burlap和Spring自带的Http invoker
一、RMI
1、使用rmi将personService导出为RMI服务
就这样把personService接口的实现发布为一个RMI服务,我们还可以通过将RMI注册表绑定到不同的端口和主机上,通过registryPort和registryHost属性指定。
Spring的RmiProxyFactoryBean是一个工厂Bean,该Bean可以为RMI服务创建代理。使用RmiProxyFactoryBean引用一个personService的RMI服务很简单。
注意本地的domain类的包名要与远程相同类的包名一样。
RMI是一种实现与远程服务交互的非常好的方式,但是它存在限制。首先,RMI很难穿越防火墙,这是因为RMI使用任意端口来交互——这是防火墙所不允许的。
二、Hessian和Burlap
你可能想知道如何在Hessian和Burlap之间做出选择,很大程度上,它们是一样的。唯一的区别在与Hessian的消息是二进制的,而Burlap的消息是XML。
Hessian是基于Http的,配置Hessian控制器需要将HessianServiceExporter实现为一个SpringMVC控制器。这意味着我们要使用导出的Hessian服务,我们需要两个额外的配置步骤:1、在web.xml配置url截获器 2、在Spring配置文件中配置一个URL处理器,将URL映射到Hessian服务上。
访问Hessian/Burlap服务,Hessian是基于二进制的,Burlap是基于xml的
三、Spring的HttpIvoker
跟Hessian和Burlap差不多
四、JAX-WS端点
导出独立的JAX-WS端点,当对象的生命周期不是由Spring管理的,而对象的属性又需要注入Spring所管理的Bean时,SpringBeanAutowiringSupport很有用。但是在合适的场景下,它还可以把Spring管理的Bean导出为JAX-WS端点。Spring管理的Bean发布为JAX-WS Runtime中的服务端点。不像其他服务导出器,SimpleJaxWsServiceExporter不需要为它指定一个被导出。