【Spring】几种RPC模型的使用与比较——Hessian/Burlap
来源:互联网 发布:建国大业 知乎 编辑:程序博客网 时间:2024/06/15 20:39
Hessian和Burlap,现在进Caucho的网站都几乎见不到这方面的内容了。
我也不知道有没有人还会用这两个东东,虽然去年出了一个版本,但上一个版本是在2010年。
刚才在群里问了一下有没有人用,结果还真有人用Hessian,他们是C#和Java做通信。
Burlap性能更令人头疼,不知道还有没有人提及。
虽然不知道使用情况如何,但也在这里简单记录一下,拓展一下思维。
Hessian和Burlap都是由Caucho提供的,Hessian是Resin的一部分。
这两个东西就像同一件事物的两个部件,比如像这样的枪+链锯:
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"
/>
调用:
ApplicationContext context =
new
ClassPathXmlApplicationContext(
"classpath:applicationContext.xml"
);
HessianService service = (HessianService)context.getBean(
"myHessianClient"
);
System.out.println(service.justHadEnoughParties());
console输出:
对于Burlap,几乎与Hessian的配置没什么区别;
只需要把HessianServiceExporter改为BurlapServiceExporter,
并将HessianProxyFactoryBean改为BurlapProxyFactoryBean即可。
RMI使用Java的序列化,而Hessian/Burlap则为了不同语言之间通信而使用私有的序列化。
如果我需要基于HTTP,但我并不需要多语言支持,我只想用Java...
- 【Spring】几种RPC模型的使用与比较——Hessian/Burlap
- 【Spring】几种RPC模型的使用与比较——Hessian/Burlap
- Spring - 几种RPC模型的使用与比较
- 几种通讯协议的比较 RMI > Httpinvoker >= Hessian >> Burlap >> web service
- 几种通讯协议的比较:RMI>HttpInvoker>=Hessian>Burlap>Web Service
- 几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >> web service
- 几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >> web service
- 几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >> web service
- 几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >> web service
- 几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >> web service
- 几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >> web service
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- GitHub上最流行的10000个Java都使用了哪些库?
- 【解惑】 中断线程Interrupted的用处
- Objective-C - NSString 和 NSDate相互转换
- hdu2844多重背包简单应用
- nyoj214
- 【Spring】几种RPC模型的使用与比较——Hessian/Burlap
- 编译时控制台报出“error: Apostrophe not preceded by \ ”
- 消息中心 NSNotificationCenter
- codechef Jewels and Stones 题解
- Schema
- 线性表-串:KMP模式匹配算法
- c语言之良好的编程习惯(二)
- 发送手机短信获取验证码功能
- 内核漏洞学习