Hessian——轻量级的二进制协议远程调用实现方案
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——轻量级的二进制协议远程调用实现方案相关推荐
- Hessian Binary Web Service Protocol远程接口调用入门
摘要:Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二 ...
- 基于 Hessian 轻量级远程调用的原理及示例
1 简介 Hessian 是 Caucho 公司开发的一种基于二进制 RPC 协议(Remote Procedure Call protocol)的轻量级远程调用框架,其使用简单的方法提供了 RMI ...
- 远程调用——hessian使用入门
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协 ...
- j2ee中常用的五种远程调用协议
一.综述 本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能. RMI是java语言本身提供的远程通 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(上篇)
一.序言 Hadoop是一个技术生态圈,zookeeper是hadoop生态圈里一个非常重要的技术,当我研究学习hadoop的相关技术时候,有两块知识曾经让我十分的困惑,一个是hbase,一个就是zo ...
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...
- Marco's Java【Dubbo 之手写Dubbo框架实现远程调用】
前言 关于Dubbo入门的网上教程也特别多,因此我没有专门出关于Dubbo的系列博文(主要呢- 也是在忙些工作上的事儿),用Dubbo特别简单,但是想要把Dubbo学好,学精还得花费不少时间的,特别是 ...
- 徒手撸框架--实现 RPC 远程调用
微服务,已经是每个互联网开发者必须掌握的一项技术.而 RPC 框架,是构成微服务最重要的组成部分之一.趁最近有时间.又看了看 dubbo 的源码.dubbo 为了做到灵活和解耦,使用了大量的设计模式和 ...
- java远程调用笔记
2019独角兽企业重金招聘Python工程师标准>>> 1.远程调用 常用的远程调用:webservice,二进制协议,Restful webservice:本质上就是http+so ...
- SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用
什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...
最新文章
- 【粉丝福利放送】Python最新书籍免费领取!
- python脚本实例手机端-手机APP自动签到-python实现 - 运维之路
- 基于webpack搭建前端工程解决方案探索
- zzuli 2527: THE END IS COMING!!!!!(最小费用最大流)
- 在iOS开发中使用FMDB
- Android view.settran,Android RecyclerView从入门到玩坏
- 忘记glassfish密码,那就重置密码呗
- 一年读完100本书(5/100)《创新者的窘境》2021-02-25
- 前端学习笔记-JS数据类型
- 说说你印象中比较深刻的 Bug
- 解决微信公众号accessToken白名单问题
- svg 组件用法 -- defs标签使用
- 解决springboot的pom.xml文件第一行报错问题
- 大数据数据库:MPP vs MapReduce
- selenium 定位一组元素
- 小米手机深陷“返修门” 售后成软肋
- angular : 自定义组件双向绑定 [(ngModel)]
- GPS与GPRS模块功差之千里
- abaqus帮助html,ABAQUS/CAE 常 问 界 面 操 作(转自SimWe仿真论坛
- hbuilder 断点_Hbuilder配置php断点调试
热门文章
- Atitit. Toast alert loading js控件 atiToast v2新特性
- Atitit. 。Jna技术与 解决 java.lang.Error: Invalid memory access
- atitit.http get post的原理以及框架实现java php
- Rust: format!
- 【独家】阿里云罗庆超:对象存储 OSS 海量数据管理和应用最佳实践
- 开源中国开源世界高峰论坛如期将至
- 【数学信号处理】基于matlab数字信号频谱分析【含Matlab源码 1544期】
- 【优化算法】人工生态系统优化算法(AEO)【含Matlab源码 023期】
- 【TWVRP】基于matlab灰狼算法求解带时间窗的路径规划问题【含Matlab源码 1075期】
- 【数字识别】基于matlab离散Hopfield神经网络数字识别【含Matlab源码 226期】