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 依赖

<!-- 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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容