美文网首页
轻量级rpc框架Hessian

轻量级rpc框架Hessian

作者: 先生_吕 | 来源:发表于2017-07-05 23:42 被阅读1318次

    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

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

    相关文章

      网友评论

          本文标题:轻量级rpc框架Hessian

          本文链接:https://www.haomeiwen.com/subject/edwqhxtx.html