Hessian 协议
特性描述
Hessian 协议用于集成 Hessian 的服务。Hessian 底层使用 Http 通信和 Servlet 来暴露服务。Dubbo 默认嵌入式 Jetty 作为服务器实现。
Hessian 是 Caucho 的一个开源 RPC 框架,其通信效率高于 WebService 和 Java 自带的序列化。
- 连接数:多连接
- 连接方式:短连接
- 传输协议:HTTP
- 传输方式:同步传输
- 序列化:Hessian 二进制序列化
- 适用范围:出入参数据包较大,提供者个数多于消费者,提供者压力大,可传输文件。
- 适用场景:页面传输、文件传输,或与原生 Hessian 服务互操作。
Dubbo 的 Hessian 协议可以与原生 Hessian 服务互操作,即
- 提供者用 Dubbo 的 Hessian 协议暴露服务,消费者直接用标准 Hessian 接口调用,
- 或者提供者用标准 Hessian 暴露服务,消费者用 Dubbo 的 Hessian 协议调用。
约束
- 参数和返回值需要实现
Serializable
接口。 - 参数和返回值不能自定义实现
List
、Map
、Number
、Date
、Calendar
等接口,只能使用 JDK 自带的实现,因为 hessian 会做特殊处理,自定义实现会导致类中所有属性值丢失。
使用场景
Hessian 是一个基于 Binary-RPC 协议实现的轻量级 RPC 服务,用于实例的序列化和反序列化。
如何使用
依赖
从 Dubbo 3 开始,Hessian 协议不再嵌入 Dubbo 中,需要单独引入独立的 模块。
<dependency>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-rpc-hessian</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
定义 hessian 协议
<dubbo:protocol name="hessian" port="8080" server="jetty" />
设置默认协议
<dubbo:provider protocol="hessian" />
设置服务协议
<dubbo:service protocol="hessian" />
多端口
<dubbo:protocol id="hessian1" name="hessian" port="8080" />
<dubbo:protocol id="hessian2" name="hessian" port="8081" />
直连
<dubbo:reference id="helloService" interface="HelloWorld" url="hessian://10.20.153.10:8080/helloWorld" />
最后修改于 2023 年 2 月 22 日: 合并重构网站 (#2293) (4517e8c1c9c)