hessian无法获取连接_SpringBoot整合Hessian

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 依赖
com.caucho    hessian    4.0.38
服务端代码

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

服务端业务代码接口
package com.wzh.demo.hessian.hessianService.service;/** *  *  * @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;/** *  *  * @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;/** *  *  * @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      * @return 业务对象     */    public static  T getHessianClientBean(Class 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方法

服务端控制台输出

8c379359a821df384b2f0503f3637221.png

客户端控制台输出

83e28302283b7cbbdb193588cbc31c4c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值