最新的小菜:(四)远程服务:Hessian 服务实现远程调用

标题:

(四)远程服务:Hessian 服务实现远程调用


在很久之前, 我们一起领略了 RMI 提供远程服务的过程 
https://blog.csdn.net/bestcxx/article/details/79488165 
本篇我们继续深入下去,了解 Hessian 提供远程服务的过程

  • 相比 RMI 而言,Hessian 是跨语言的

    RMI 是 Java 语言自己提供的远程调用过程解决方法,它要求服务的提供者和调用者都必须是 Java 语言,而由于 Hessian 对外而言类似于一个 http 服务,所以可以跨语言访问。延伸来说,由于 RMI 需要注册端口和一个随机分配的数据通信端口,导致其会遇到防火墙问题,而 Hessian 借助于 http 服务,可以避免这个问题。

  • Hessian 基于二进制消息通信

    和 RMI 一样,Hessian 也是通过二进制消息进行通信的。

  • Spring 4 结合 Hessian 4

    Maven 依赖引入 Hessian 包-服务端和客户端

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

服务端的特殊配置

  • 类似于 RMI 服务的发布,Hessian 服务的发布也需要先将本地的服务声明为 Hessian 服务

    /**
     * 注册为远程服务
     * @return
     */
    @Bean
    public HessianServiceExporter hessianExportedApiService(){
        HessianServiceExporter exporter=new HessianServiceExporter();
        exporter.setService(getApiService());
        exporter.setServiceInterface(ApiService.class);
        return exporter;
    }   
    
    /**
     * 注册为Spring Bean
     * @return
     */
    @Bean 
    public ApiService getApiService(){
        return new ApiServiceImpl();
    }

  • 除此之外,还需要设置一个 url 映射,当 web 访问请求符合映射时,将会转由 Hessian 服务来进行处理

    /**
     * 设置URL映射
     */
    @Bean
    public HandlerMapping hessianMapping(){
        SimpleUrlHandlerMapping shm=new SimpleUrlHandlerMapping();
        Properties properties=new Properties();
        properties.put("/api.service", "hessianExportedApiService");
        shm.setMappings(properties);
        return shm;
    }

  • 最后服务端是一个web工程,所以附带web.xml 的内容

    <servlet-mapping>  
    <servlet-name>springservlet</servlet-name>  
    <url-pattern>/</url-pattern> 
    <!--  <url-pattern>*.service</url-pattern>   -->
    </servlet-mapping>

客户端的调用

客户端的调用过程相对服务端简单了许多

/**
     * 为远程服务设置代理
     * @return
     */
    @Bean
    public HessianProxyFactoryBean apiService(){
        HessianProxyFactoryBean proxy=new HessianProxyFactoryBean();
        proxy.setServiceUrl("http://localhost:8086/hessian-provider/api.service");
        proxy.setServiceInterface(ApiService.class);
        return proxy;
    }

{"result":"success","name":"服务端:用户输入了姓名=jecket","model":{"userName":"jecket","age":


归档文章:点击打开链接


查看历史内容:微信公众号:蜗蜗工作室


猜你喜欢

转载自blog.csdn.net/bestcxx/article/details/78937649
今日推荐