轻量级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

【客户端开发】
结构图

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服务

【客户端开发】

结构图:

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());
    }

调用结果

result.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容