轻量级Rpc框架Hessian学习笔记

Posted 写点笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轻量级Rpc框架Hessian学习笔记相关的知识,希望对你有一定的参考价值。

1.Hessian简介
Hessian是一个轻量级的远程http工具,采用binaray Rpc协议,适合发送二进制数据,同时具有防火墙穿透能力,hessian一般通过web应用来提供服务。一句话说就是Hessian是一个基于http的二进制rpc轻量级工具。
Hessian官网是:http://hessian.caucho.com/
2.Hessian的使用
一般来说,对于RPC远程调用都类似于RMI这种形式。Hessian也是这种,需要服务端和消费端通过接口相关联,服务端实现接口,当然数据在网络传输之后要进行还原就需要序列号。基于以上描述,我们做个简单的demo学习一下Hessian。
公用接口:
public interface SayHello {
HelloEntity hello(String name);}
传输的实体:
public class HelloEntity implements Serializable {

private String tian;

public HelloEntity(String tian) {

this.tian = tian; }

public String getTian() { return tian; }

public void setTian(String tian) { this.tian = tian; }

@Override public String toString() { return "HelloEntity{" + "tian='" + tian + '\'' + '}'; }}
服务端接口实现:
@Componentpublic class SayHelloService implements SayHello { @Override public HelloEntity hello(String name) { return new HelloEntity("你好!"+name); }}
在服务端我们将实现注入到spring容器中,在处理请求的时候再从容器中获取实现进行调用。
服务端接口对外暴露:
@Configurationpublic class MyService {
@Resource private SayHelloService sayHelloService;
@Bean("/hello.htm") public HessianServiceExporter exportHelloHessian() { HessianServiceExporter exporter = new HessianServiceExporter(); exporter.setService(sayHelloService); exporter.setServiceInterface(SayHello.class); return exporter; }}
客户端调用:
public class TestHessian { public staticT getHessianClientBean(Classclazz,String url) throws Exception{ // 客户端连接工厂,这里只是做了最简单的实例化,还可以设置超时时间,密码等安全参数 HessianProxyFactory factory = new HessianProxyFactory(); return (T)factory.create(clazz,url); }
public static void main(String[] args) { // 服务器暴露出的地址        String url = "http://localhost:8081/hello.htm"; // 客户端接口,需与服务端对象一样 try { SayHello helloHessian =TestHessian.getHessianClientBean(SayHello.class,url);            HelloEntity msg =  helloHessian.hello("你好");            System.out.println(msg); } catch (Exception e) { e.printStackTrace();        } }}
调用结果:
轻量级Rpc框架Hessian学习笔记
至此demo是学完了,那么问题是这里的HessianServiceExporter 以及背后的HandlerMapping是如何执行的,这块就不研究了。有一种写法是这样的。
轻量级Rpc框架Hessian学习笔记
查看SimpleUrlHandlerMappings的实现,发现mapping在注册请求url的时候会将处理器注册进去,如果是string类型的,那么会从spring上下文中获取该名称的bean,然后进行注册。所以这块的HessianServiceExporter 其实就相当于更上层次的处理器。相当于在上层进行了请求的定制化处理。我们看一下HessianServiceExporter 的类关系。
@FunctionalInterfacepublic interface HttpRequestHandler { void handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws ServletException, IOException;}
HttpRequestHandler 是SpringMvc请求的拦截器,每个请求都会根据url拿到这个handler,然后执行各种的handleRequest方法,所以这个handleRequest就是扩展的核心。所以我们可以通过实现这个httpRequestHandler,然后将其注册到mappers关系中,就可以自由的实现我们的一些固定模式的接口开发。

晚安~
This browser does not support music or audio playback. Please play it in Weixin or another browser.



以上是关于轻量级Rpc框架Hessian学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

hessian(转)

RPC远程调用 之 Hessian

基于Thrift的跨语言高可用高性能轻量级的RPC框架

JSON-RPC轻量级远程调用协议介绍及使用

Hessian与Webservice的区别

Hessian与Webservice的区别