轻量级rpc框架Hessian

RPC远程服务调用在分布式项目架构中扮演着不可或缺的角色,近几年的运用也越来越广泛,主要目的旨在做到高可用的开发,RPC的相关框架有很多,比如阿里的Bubbo、HFS、脸书的Thrift、谷歌的grcp、推特儿的finagle、新浪的Montan以及avro、ice、rpcx、Harpc、hessian等。各个框架都有其各自的优缺点。

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

【开发注意】

服务端:
    包含Hessian的jar包
    设计一个接口,用来给客户端调用
    实现该接口的功能
    配置web.xml,配置好相应的servlet
    由于使用二进制RPC协议传输数据,对象必须进行序列化,实现Serializable接口
    对于复杂对象可以使用Map的方法传递
客户端:
    Java客户端包含Hessian的jar包
    具有和服务器端结构一样的接口,包括命名空间都最好一样
    利用HessianProxyFactory调用远程接口

Hessian的Demo

【客户端开发】
结构图

《轻量级rpc框架Hessian》 server.png

创建Web工厂HessianServer,添加hessian-3.0.1.jar包
User类

/**
 * Created with lvfang.
 * Date: 2017/7/5
 * Desc:容器类
 */
public class User implements Serializable {
       private String name;  
       private Integer age;  
     
        public User() {   }  
         
        public User(String name, Integer age) {  
            super();  
            this.name = name;  
            this.age = age;  
        }    
      //getter  setter方法
}

接口IBasicApi

/**
 * Created with lvfang.
 * Date: 2017/7/5
 * Desc:接口类
 */
public interface IBasicApi {

    public boolean setUserName(String name);  
      
    public String sayHello();  
      
    public User getUser(); 
}

接口实现类BasicService

/**
 * Created with lvfang.
 * Date: 2017/7/5
 * Desc:接口实现类
 */
public class BasicService implements IBasicApi {
    private String name;  
    public boolean setUserName(String name) {  
        this.name = name;  
        return false;  
    }  
    public String sayHello() {  
        return "Hello "+ name+",Welcome to Hessian!";  
    }  
    public User getUser() {  
        return new User(name, 23);  
    }  
}

配置servlet(接口URL的规定,通过URL调用接口)

  <servlet>  
    <servlet-name>HessianServlet</servlet-name>  
    <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>  
    <init-param>  
        <param-name>service-class</param-name>  
        <param-value>com.lvfang.hessian.service.impl.BasicService</param-value>  
    </init-param>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>HessianServlet</servlet-name>  
    <url-pattern>/api/service</url-pattern>  
  </servlet-mapping> 

启动server服务

【客户端开发】

结构图:

《轻量级rpc框架Hessian》 client.png

同样创建Java工程HessianClient,添加hessian-3.0.1.jar包

创建与服务端一致的com.lvfang.hessian.domain.User和com.mahc.hessian.service.impl.IBasicApi

测试类Test

public static void main(String[] args) throws MalformedURLException {
        String url = "http://localhost:8080/HessianServer/api/service";

        HessianProxyFactory factory = new HessianProxyFactory();
        IBasicApi api = (IBasicApi) factory.create(IBasicApi.class, url);
        api.setUserName("lvfang");
        System.out.println(api.sayHello());
        System.out.println(api.getUser().getName());
        System.out.println(api.getUser().getAge());
    }

调用结果

《轻量级rpc框架Hessian》 result.png

这样就完成了一个简单的跨服务调用

    原文作者:先生_吕
    原文地址: https://www.jianshu.com/p/2106cbbab7b1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞