热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

轻量级rpc框架Hessian

RPC远程服务调用在分布式项目架构中扮演着不可或缺的角色,近几年的运用也越来越广泛,主要目的旨在做到高可用的开发,RPC的相关框架有很多,比如阿里的Bubbo、HFS、脸书的Thr

RPC远程服务调用在分布式项目架构中扮演着不可或缺的角色,近几年的运用也越来越广泛,主要目的旨在做到高可用的开发,RPC的相关框架有很多,比如阿里的Bubbo、HFS、脸书的Thrift、谷歌的grcp、推特儿的finagle、新浪的Montan以及avro、ice、rpcx、Harpc、hessian等。各个框架都有其各自的优缺点。

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

【开发注意】

服务端:
包含Hessian的jar包
设计一个接口,用来给客户端调用
实现该接口的功能
配置web.xml,配置好相应的servlet
由于使用二进制RPC协议传输数据,对象必须进行序列化,实现Serializable接口
对于复杂对象可以使用Map的方法传递
客户端:
Java客户端包含Hessian的jar包
具有和服务器端结构一样的接口,包括命名空间都最好一样
利用HessianProxyFactory调用远程接口

Hessian的Demo

【客户端开发】
结构图

《轻量级rpc框架Hessian》 server.png

创建Web工厂HessianServer,添加hessian-3.0.1.jar包
User类

/**
* Created with lvfang.
* Date: 2017/7/5
* Desc:容器类
*/
public class User implements Serializable {
private String name;
private Integer age;

public User() { }

public User(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
//getter setter方法
}

接口IBasicApi

/**
* Created with lvfang.
* Date: 2017/7/5
* Desc:接口类
*/
public interface IBasicApi {
public boolean setUserName(String name);
public String sayHello();
public User getUser();
}

接口实现类BasicService

/**
* Created with lvfang.
* Date: 2017/7/5
* Desc:接口实现类
*/
public class BasicService implements IBasicApi {
private String name;
public boolean setUserName(String name) {
this.name = name;
return false;
}
public String sayHello() {
return "Hello "+ name+",Welcome to Hessian!";
}
public User getUser() {
return new User(name, 23);
}
}

配置servlet(接口URL的规定,通过URL调用接口)


HessianServlet
com.caucho.hessian.server.HessianServlet

service-class
com.lvfang.hessian.service.impl.BasicService



HessianServlet
/api/service

启动server服务

【客户端开发】

结构图:

《轻量级rpc框架Hessian》 client.png

同样创建Java工程HessianClient,添加hessian-3.0.1.jar包

创建与服务端一致的com.lvfang.hessian.domain.User和com.mahc.hessian.service.impl.IBasicApi

测试类Test

public static void main(String[] args) throws MalformedURLException {
String url = "http://localhost:8080/HessianServer/api/service";
HessianProxyFactory factory = new HessianProxyFactory();
IBasicApi api = (IBasicApi) factory.create(IBasicApi.class, url);
api.setUserName("lvfang");
System.out.println(api.sayHello());
System.out.println(api.getUser().getName());
System.out.println(api.getUser().getAge());
}

调用结果

《轻量级rpc框架Hessian》 result.png

这样就完成了一个简单的跨服务调用


推荐阅读
  • 在尝试启动Java应用服务器Tomcat时,遇到了org.apache.catalina.LifecycleException异常。本文详细记录了异常的具体表现形式,并提供了有效的解决方案。 ... [详细]
  • 理解HTTP状态码及其应用
    本文详细解析了HTTP状态码的分类及常见代码的意义,帮助开发者和用户更好地理解和解决网络请求中遇到的问题。 ... [详细]
  • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
  • Spring Boot 初学者指南(第一部分)
    本文介绍了Spring Boot框架的基础知识,包括其设计理念、主要优势以及如何简化传统的J2EE开发流程。 ... [详细]
  • 酷家乐 Serverless FaaS 产品实践探索
    本文探讨了酷家乐在 Serverless FaaS 领域的实践与经验,重点介绍了 FaaS 平台的构建、业务收益及未来发展方向。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • Nagios可视化插件开发指南 —— 配置详解
    本文详细介绍了Nagios监控系统的配置过程,包括数据库的选择与安装、Nagios插件的安装及配置文件的解析。同时,针对常见的配置错误提供了具体的解决方法。 ... [详细]
  • 在使用 MySQL 6.0.x 及以上版本的 JDBC 驱动时,若未正确配置 `serverTimezone` 参数,可能会导致连接异常。本文探讨了这一问题的原因及解决方法。 ... [详细]
author-avatar
魔者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有