Dubbo常用协议之Dubbo协议与Hessian协议解析

Dubbo常用协议之Dubbo协议与Hessian协议解析前言 Dubbo 允许配置多协议 在不同服务上支持不同协议或者同一服务上同时支持多种协议 不同服务在性能上适用不同协议进行传输 比如大数据用短连接协议 小数据大并发用长连接协议 Dubbo 协议 Dubbo 缺省协议采用单一长连接和 NIO 异步通讯 适合于小数据量大并发的服务调用 以及服务消费者机器数远大于服务提供者机器数的情况 反之 Dubbo 缺省协议不适合传送大数据量的服务 比如传文件 传视频等 除非请求量很低 Dubbo 协议能使用的传输方式 mina netty grizzyDubbo 协议能

前言

Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议。不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议。

Dubbo协议

Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。

Dubbo协议能使用的传输方式:mina、netty、grizzy

Dubbo协议能使用的序列化方式:dubbo, hessian2, java, json

Dubbo协议能使用的线程派发方式:all, direct, message, execution, connection

Dubbo协议能使用的线程池类型:fixed, cached

特性:
  • 连接个数:单连接
  • 默认端口:20880
  • 连接方式:长连接
  • 传输协议:TCP
  • 默认传输方式:Dubbo协议底层默认使用的是netty,性能非常优秀,官方推荐使用此协议。
  • 默认使用序列化方式:hessian2
  • 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用 dubbo 协议传输大文件或超大字符串。
  • 适用场景:常规远程服务方法调用
约束:
  • 参数及返回值需实现 Serializable 接口。
  • 参数及返回值不能自定义实现 List, Map, Number, Date, Calendar 等接口,只能用 JDK 自带的实现,因为 hessian 会做特殊处理,自定义实现类中的属性值都会丢失。
  • Hessian 序列化,只传成员属性值和值的类型,不传方法或静态变量。

接口增加方法,对客户端无影响,如果该方法不是客户端需要的,客户端不需要重新部署。输入参数和结果集中增加属性,对客户端无影响,如果客户端并不需要新属性,不用重新部署。

输入参数和结果集属性名变化,对客户端序列化无影响,但是如果客户端不重新部署,不管输入还是输出,属性名变化的属性值是获取不到的。

总结:服务器端和客户端对领域对象并不需要完全一致,而是按照最大匹配原则。就是你变了,但是如果我用不上(察觉不到你的变化),就不会报错。

<dubbo:protocol name="dubbo" port="20880" /> 

设置服务默认协议:

<dubbo:provider protocol="dubbo" /> 

设置服务协议:

<dubbo:service protocol="dubbo" /> 

多端口:

<dubbo:protocol id="dubbo1" name="dubbo" port="20880" /> <dubbo:protocol id="dubbo2" name="dubbo" port="20881" /> 
Hessian协议

Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。

特性
  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议:HTTP
  • 传输方式:同步传输
  • 序列化:Hessian二进制序列化
  • 适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。
  • 适用场景:页面传输,文件传输,或与原生hessian服务互操作
约束

与dubbo协议约束类似。

所需依赖:

<dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>4.0.38</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>9.4.28.v</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>9.4.28.v</version> </dependency> 
多协议配置

在这里插入图片描述
在这里插入图片描述
消费端引用:
在这里插入图片描述






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227014.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午10:08
下一篇 2026年3月16日 下午10:09


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号