美文网首页
SpringBoot整合Hessian

SpringBoot整合Hessian

作者: TryCatch菌 | 来源:发表于2018-11-18 21:39 被阅读0次

Hessian是一个轻量级的remoting on http框架(远程调用框架),采用的是Binary RPC协议(二进制远程调用协议),和我们在web工程中常用的webservice比较类似,不过是个比较轻量级的框架,还有一点不一样的是webserce服务端和客户端何意用不同的框架,例如服务端用CXF,客户端用Axis。Hessian不行,调用方和被调用方必须都是Hessian。Hessian可通过Servlet提供远程服务,需要将请求映射到Hessian服务。也可Spring框架整合。

SpringBoot整合Hessian和Spring整合的步骤差不多,不过因为boot提倡无xml,所以整合的时候boot是在@SpringBootApplication启动类中进行,传统spring是在xml和web.xml中进行,在自己搭建项目的时候可以互相参考看,可以参考此篇博文:https://my.oschina.net/pagecorrect/blog/745631

maven 依赖

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

服务端代码

服务端在springBoot的启动类进行配置(@SpringBootApplication),或者在标记为配置类的代码中进行配置(@Configuration)。如果启动类中已经配置了很多东西,推荐做单独的配置类,也方便管理。

服务端业务代码接口
package com.wzh.demo.hessian.hessianService.service;

/**
 * <发布的第一个hesian测试接口>
 * <功能详细描述>
 * @author wzh
 * @version 2018-11-18 17:24
 * @see [相关类/方法] (可选)
 **/
public interface SayHelloHessian {

    /**
     *  接口测试方法
     * @return
     */
    public String SayHello(String msg);

}

服务端业务代码接口实现类,对象通过spring管理
package com.wzh.demo.hessian.hessianService.service.Impl;

import com.wzh.demo.hessian.hessianService.service.SayHelloHessian;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

/**
 * <一句话功能描述>
 * <功能详细描述>
 * @author wzh
 * @version 2018-11-18 17:46
 * @see [相关类/方法] (可选)
 **/
@Service("sayHelloHessian")
public class SayHelloHessianImpl implements SayHelloHessian{

    private Logger log = Logger.getLogger(SayHelloHessianImpl.class);

    @Override
    public String SayHello(String msg) {

        log.info("-----------进入hessian方法,客户端参数:"+ msg +"--------------");

        return "服务端返回:hello hessian";
    }
}

服务端接口发布配置类,通过spirng注解配置
package com.wzh.demo.hessian.hessianService.config;

import com.wzh.demo.hessian.hessianService.service.SayHelloHessian;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.remoting.caucho.HessianServiceExporter;

import javax.annotation.Resource;

/**
 * <用于配置发布hessian接口>
 * <这里只是做了最简单的配置,还可以设置超时时间,密码这些安全参数>
 * @author wzh
 * @version 2018-11-18 16:55
 * @see [相关类/方法] (可选)
 **/
@Configuration //标记为spring 配置类
public class HessionServiceConfig {

    @Resource
    private SayHelloHessian sayHelloHessian;

    /**
     * 1. HessianServiceExporter是由Spring.web框架提供的Hessian工具类,能够将bean转化为Hessian服务
     * 2. @Bean(name = "/helloHessian.do")加斜杠方式会被spring暴露服务路径,发布服务。
     * @return
     */
    @Bean("/helloHessian.do")
    public HessianServiceExporter exportHelloHessian()
    {
        HessianServiceExporter exporter = new HessianServiceExporter();
        exporter.setService(sayHelloHessian);
        exporter.setServiceInterface(SayHelloHessian.class);
        return exporter;
    }
}

到此为止一个简单的基于Hessian的远程调用服务端就完成了,比webservice简单多了,下面进行客户端的编写。

客户端代码

客户端同样需要服务端的jar。除了jar依赖,客户端还需要两个东西,第一个是和业务端一样的接口代码,还有一个就是Hessian的连接对象。客户端可以做成spring管理的模式,一个接口配置一个,也可以做成我下面写的这种,一个工具类,每次调用。

客户端业务接口
package com.wzh.demo.hessian.hessianService.service;

/**
 * <发布的第一个hesian测试接口>
 * <功能详细描述>
 * @author wzh
 * @version 2018-11-18 17:24
 * @see [相关类/方法] (可选)
 **/
public interface SayHelloHessian {

    /**
     *  接口测试方法
     * @return
     */
    public String SayHello(String msg);

}

客户端获取连接对象工具类
package com.wzh.demo.hessian.hessianClient.utils;

import com.caucho.hessian.client.HessianProxyFactory;
import com.wzh.config.utils.BusinessException;
import com.wzh.demo.hessian.hessianService.service.SayHelloHessian;
import org.apache.log4j.Logger;

/**
 * <获取客户端连接工厂对象>
 * <功能详细描述>
 * @author wzh
 * @version 2018-11-18 20:45
 * @see [相关类/方法] (可选)
 **/
public class HessianProxyFactoryUtil {

    private Logger log = Logger.getLogger(HessianProxyFactoryUtil.class);

    /**
     *  获取调用端对象
     * @param clazz 实体对象泛型
     * @param url 客户端url地址
     * @param <T>
     * @return 业务对象
     */
    public static <T> T getHessianClientBean(Class<T> clazz,String url) throws Exception
    {
        // 客户端连接工厂,这里只是做了最简单的实例化,还可以设置超时时间,密码等安全参数
        HessianProxyFactory factory = new HessianProxyFactory();

        return (T)factory.create(clazz,url);
    }

    //
    public static void main(String[] args) {

        // 服务器暴露出的地址
        String url = "http://localhost:8080/SpringBootDemo/helloHessian.do";

        // 客户端接口,需与服务端对象一样
        try {
            SayHelloHessian helloHessian = HessianProxyFactoryUtil.getHessianClientBean(SayHelloHessian.class,url);
            String msg =  helloHessian.SayHello("你好");

            System.out.println(msg);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

这里直接在utils中写了个main方法,我们启动服务端后运行下man方法

服务端控制台输出


image.png

客户端控制台输出


image.png

相关文章

网友评论

      本文标题:SpringBoot整合Hessian

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