2019独角兽企业重金招聘Python工程师标准>>>

最近要做一个工作流的系统来支持子系统的上传,审批,复审,会签等操作,而一般传统的项目间交流主要是通过http调用另外的服务器的地址,返回一个json或是字符串,这种方式效率低,并且极其消耗资源,上家公司作为一个电商网站,有两个项目和一个中间件,每个项目之间信息处理全是通过http实现,由于优化不到位(应该是根本没有优化),经常会出现runtimeout的异常,而将runtime的时间设置太长也会影响用户体验,由于有些数据经常需要跨项目(数据库不同)查询或更新,导致异常经常出现。那时以为项目间就应该通过http传输,直到遇到Hessian,才知道可以这样利用第三方的http实现方案,这样更加方便和可靠。

(1).客户端:

a.发送远程调用请求:

客户端程序—>发送远程调用请求—>Hessian客户端拦截器—>封装远程调用请求—>Hessian代理—>通过HTTP协议发送远程请求代理到服务端。

b.接收远程调用响应:

远程调用结果—>HTTP响应—>客户端。

(1).服务端:

a.接收远程调用请求:

远程调用HTTP请求—>HessianServiceExporter接收请求—>HessianExporter将远程调用对象封装为HessianSkeleton框架—> HessianSkeleton处理远程调用请求。

b.返回远程调用响应:

HessianSkeleton封装远程调用处理结果—>HTTP响应—>客户端。

Hessian的实现:服务端Hessian需要四个东西就可以提供服务了,一个interface的java;一个实现interface的impl的java;一个实现了Serializable的实体,用来返回需要的东西;一个配置好了的web.xml用来实现暴露出远程接口,写好服务端接口和实现,测试完毕后将接口类和实体类已jar包形式导出;

客户端Hessian需要服务器接口和实体的jat包,服务器端的路径,就可以轻松的将服务器端的服务引用出来,这样就达到了对服务器端的操作。

eg:

接口:public interface BasicAPI {
public void setGreeting(String greeting);
public String hello();
public User getUser();
}

接口实现:

public class BasicService implements BasicAPI {
private String _greeting = "Hello, world";
public void setGreeting(String greeting)
{
_greeting = greeting;
System.out.println("set greeting success:"+_greeting);
}
public String hello()
{
return _greeting;
}
public User getUser() {
return new User("prance", "meshow");
}
}

pojo实体:

public class User implements Serializable{
String userName ="snoopy";
String password ="showme";
public User(String user, String pwd) {
this.userName =user;
this.password= pwd;
}
public String getUserName() {
return userName;
}
public String getPassword() {
return password;
}
}

web.xml配置:

<servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
        <init-param>
        <param-name>service-class</param-name>
        <param-value>demo.BasicService</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

客户端可以是一个main启动方法

import demo.User;
import demo.BasicAPI;
import com.caucho.hessian.client.HessianProxyFactory;

public static void main(String[] args) {

//在服务器端的web.xml文件中配置的HessianServlet映射的访问URL地址
        String url = "http://localhost:8081/OCROnline/hello";
        HessianProxyFactory factory = new HessianProxyFactory();
        BasicAPI service = (BasicAPI) factory.create(BasicAPI.class, url);//创建BasicAPI接口的实例对象
        User user = service.getUser();//调用Hessian服务器端的BasicAPI类中的getUser方法来获取一个User对象
        System.out.println(service.getUser().getPassword());
        System.out.println(service.hello());
        System.out.println(service.getUser() .getUserName());}

运行main方法就能调用服务端的方法了,超级简单!超级方便!当然这比较适合为子系统提供服务。

转载于:https://my.oschina.net/githubhty/blog/704245

Hessian——轻量级的二进制协议远程调用实现方案相关推荐

  1. Hessian Binary Web Service Protocol远程接口调用入门

    摘要:Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二 ...

  2. 基于 Hessian 轻量级远程调用的原理及示例

    1 简介 Hessian 是 Caucho 公司开发的一种基于二进制 RPC 协议(Remote Procedure Call protocol)的轻量级远程调用框架,其使用简单的方法提供了 RMI ...

  3. 远程调用——hessian使用入门

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协 ...

  4. j2ee中常用的五种远程调用协议

    一.综述 本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能. RMI是java语言本身提供的远程通 ...

  5. 架构设计:远程调用服务架构设计及zookeeper技术详解(上篇)

    一.序言 Hadoop是一个技术生态圈,zookeeper是hadoop生态圈里一个非常重要的技术,当我研究学习hadoop的相关技术时候,有两块知识曾经让我十分的困惑,一个是hbase,一个就是zo ...

  6. 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)

    在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...

  7. Marco's Java【Dubbo 之手写Dubbo框架实现远程调用】

    前言 关于Dubbo入门的网上教程也特别多,因此我没有专门出关于Dubbo的系列博文(主要呢- 也是在忙些工作上的事儿),用Dubbo特别简单,但是想要把Dubbo学好,学精还得花费不少时间的,特别是 ...

  8. 徒手撸框架--实现 RPC 远程调用

    微服务,已经是每个互联网开发者必须掌握的一项技术.而 RPC 框架,是构成微服务最重要的组成部分之一.趁最近有时间.又看了看 dubbo 的源码.dubbo 为了做到灵活和解耦,使用了大量的设计模式和 ...

  9. java远程调用笔记

    2019独角兽企业重金招聘Python工程师标准>>> 1.远程调用 常用的远程调用:webservice,二进制协议,Restful webservice:本质上就是http+so ...

  10. SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用

    什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...

最新文章

  1. 【粉丝福利放送】Python最新书籍免费领取!
  2. python脚本实例手机端-手机APP自动签到-python实现 - 运维之路
  3. 基于webpack搭建前端工程解决方案探索
  4. zzuli 2527: THE END IS COMING!!!!!(最小费用最大流)
  5. 在iOS开发中使用FMDB
  6. Android view.settran,Android RecyclerView从入门到玩坏
  7. 忘记glassfish密码,那就重置密码呗
  8. 一年读完100本书(5/100)《创新者的窘境》2021-02-25
  9. 前端学习笔记-JS数据类型
  10. 说说你印象中比较深刻的 Bug
  11. 解决微信公众号accessToken白名单问题
  12. svg 组件用法 -- defs标签使用
  13. 解决springboot的pom.xml文件第一行报错问题
  14. 大数据数据库:MPP vs MapReduce
  15. selenium 定位一组元素
  16. 小米手机深陷“返修门” 售后成软肋
  17. angular : 自定义组件双向绑定 [(ngModel)]
  18. GPS与GPRS模块功差之千里
  19. abaqus帮助html,ABAQUS/CAE 常 问 界 面 操 作(转自SimWe仿真论坛
  20. hbuilder 断点_Hbuilder配置php断点调试

热门文章

  1. Atitit. Toast alert loading js控件   atiToast v2新特性
  2. Atitit. 。Jna技术与 解决 java.lang.Error: Invalid memory access
  3. atitit.http get post的原理以及框架实现java php
  4. Rust: format!
  5. 【独家】阿里云罗庆超:对象存储 OSS 海量数据管理和应用最佳实践
  6. 开源中国开源世界高峰论坛如期将至
  7. 【数学信号处理】基于matlab数字信号频谱分析【含Matlab源码 1544期】
  8. 【优化算法】人工生态系统优化算法(AEO)【含Matlab源码 023期】
  9. 【TWVRP】基于matlab灰狼算法求解带时间窗的路径规划问题【含Matlab源码 1075期】
  10. 【数字识别】基于matlab离散Hopfield神经网络数字识别【含Matlab源码 226期】