zoukankan      html  css  js  c++  java
  • RPC远程调用 之 Hessian

      Hessian将网络传输的对象转换为二进制流通过Http进行传递,不过它是使用自己的序列化机制实现的编组与反编组,其支持的数据类型是有限制的,不支持复杂的对象。Hessian的优点是可以透过防火墙。

      Hessian也是轻量级的 ws服务,好处是不需要关心过程,调用时就像调用本地一样,毕竟是RMI,http的话,需要自己做好对象的解析  --------方便

    以spring boot整合hessian为例

    首先

    服务端 和 客户端

    添加hessian依赖

    <dependency>    
          <groupId>com.caucho</groupId>    
           <artifactId>hessian</artifactId>    
            <version>4.0.38</version>
    </dependency>


    服务端

    public interface HelloService {
      public String sayHello();
    }

    
    

    @Service("helloService")
    public class HelloServiceImpl implements HelloService{
      @Override
      public String sayHello() {
        return "Hello Service!!!";
      }
    }

    
    

    @Component
    public class HelloServicePublic {
      @Autowired
      private HelloService helloService;
      //发布服务
      @Bean(name = "/helloService")
      public HessianServiceExporter accountService() {
        HessianServiceExporter exporter = new HessianServiceExporter();
        exporter.setService(helloService);
        exporter.setServiceInterface(HelloService.class);
        return exporter;
      }
    }


    客户端

    public interface HelloService {
      public String sayHello();
    }

    @Component
    public class HelloServiceClient {
      @Bean
      public HessianProxyFactoryBean helloClient() {
        HessianProxyFactoryBean factory = new HessianProxyFactoryBean();
        factory.setServiceUrl("http://localhost:8081/taskServer/helloService");
        factory.setServiceInterface(HelloService.class);
        return factory;
      }
    }

    @Controller
    public class UserController {

      @RequestMapping(value="/getHelloRpc",method= RequestMethod.GET)
      @ResponseBody
      public String getHelloRpc(HttpServletRequest request ,ShopTaskUser user) {
        return helloService.sayHello();
      }

    }

    简单,再也不需要自己做对象的解析了……

    注意:

    1、当参数是一个实体类时,如 com.a.projects.hessian.model.Hello  两边路径需一致,interface 接口类没有路径限制。

      当以提供 jar  形式时,忽视这个情况……

    设置hessian超时时间

    修改 com.caucho.hessian.client.HessianProxyFactory 

    private long _readTimeout = 6000;
    private long _connectTimeout = 6000;

    
    
  • 相关阅读:
    1-22
    好久未更
    学习进度条 第十六周
    构建之法阅读笔记06
    返回一个整数数组中最大子数组的和(补充:输出该子数组)
    构建执法阅读笔记4
    第三周的学习进度情况
    构建之法阅读笔记03
    四则运算三
    安卓小程序之“标准体重计算器”
  • 原文地址:https://www.cnblogs.com/xiexy/p/8343090.html
Copyright © 2011-2022 走看看