几种RPC模型的使用与比较(2)


Hessian是binary transport protocol,但与RMI不同的是他不是java序列化对象,所以他可以和其他语言的程序通信,比如C++、C#、Python、Ruby什么的。
Burlap是基于XML的,自然也可以支持很多不同的语言。
当然,同样地传输内容下,XML的传输量会大一些。
如果要说有什么好处的话也只有可读性了。


实在懒得添加依赖再提供原生实现,但他并不复杂。

Creating a Hessian service using Java has four steps:

Create an Java interface as the public API

Create a client using HessianProxyFactory

Create the Service implementation class

Configure the service in your servlet engine.


在这里我主要记录一下如何在spring中导出与调用Hessian service。
正如上面所说,我需要把服务配置到servlet engine中;
服务端和客户端都需要添加一个dependency:

<dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>4.0.33</version> </dependency>


正好我这边有个使用springMVC的应用,我就在这个基础上导出Hessian service。

<servlet> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

简单写一个接口与实现:

package pac.king.common.rpc; public interface MyHessianService { public String justHadEnoughParties(); } package pac.king.common.rpc.impl; import pac.king.common.rpc.MyHessianService; public class MyHessianServiceImpl implements MyHessianService { public String justHadEnoughParties() { return "Please save me.."; } }


我在spring-mvc.xml中曾经做了如下配置,并在*Controller中使用了RequestMapping注解去给URL做映射。
但这并不妨碍我导出Hessian service再为其映射一个URL:

<context:component-scan base-package="pac.king.controller" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <value> /service=myHessianService </value> </property> </bean>


导出Hessian service:

<bean id="myHessianServiceImpl" class="pac.king.common.rpc.impl.MyHessianServiceImpl" /> <bean id="myHessianService" class="org.springframework.remoting.caucho.HessianServiceExporter" p:service-ref="myHessianServiceImpl" p:serviceInterface="pac.king.common.rpc.MyHessianService" />


现在可以调用了,我需要在客户端声明一个接口(pac.test.HessianService),再用代理去调用:

<bean id="myHessianClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean" p:serviceUrl="http://localhost:8080/runtrain/service" p:serviceInterface="pac.test.HessianService" />

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2eaf27a13bb9bd1a56b67589e2f91611.html