加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

一文具体解读 Dubbo 中的 Http 协议

发布时间:2019-10-12 06:50:57 所属栏目:教程 来源:儒雅程序员
导读:太阳红彤彤,花儿五颜六色,列位读者伴侣好,又来到了分享 Dubbo 常识点的时辰了。说到 Dubbo 框架支持的协议,你的第一回响是什么?或许会有 Dubbo 默认支持的 dubbo 协议,以及老生常谈的由当当孝顺给 Dubbo 的 rest 协议,可能是本日的主角 http。截至到

斲丧者端引用处事同样有两个留意点:

  1. org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean 是 Spring 封装的一个处事引用器,serviceInterface 指定了天生署理的接口,serviceUrl 指定了处事地址的地点,与之前设置的处事袒露者的路径必要对应。
  2. HttpInvokerProxyFactoryBean 注册到容器之中时,会同时天生一个 AccountService 接口的署理类,由 Spring 封装长途挪用的逻辑。

挪用细节说明

对付 Spring HttpInvoker 的底层实现,就没须要穷究了,但各人必定照旧会好奇一些细节:dubbo 中的 http 报体裁是怎么组织的?怎样序列化工具的?

我们行使 Wireshark 可以抓取到客户端发送的哀求以及处事端相应的报文。

一文具体解读 Dubbo 中的 http 协议

追踪报文流,可以看到具体的哀求和相应内容

一文具体解读 Dubbo 中的 http 协议

从 ContentType:application/x-java-serialized-object 和报文 Body 部门的 ASCII 码可以看出,行使的是 Java Serialize 序列化。我们将 Body 部门导出成文件,行使 Java Serialize 反序列化相应,来验证一下它的庐山真脸孔:

一文具体解读 Dubbo 中的 http 协议

行使 Java Serialize 可以正常反序列化报文,获得功效是 Spring 内置的包装类 RemoteInvocationResult,内里装饰着现实的营业返回功效。

http 协议的意义

Dubbo 提供的浩瀚协议有各自合用的场景,譬喻

  • dubbo://,dubbo 协议是默认的协议,自界说二进制协议;单个长毗连节减资源;基于 tcp,架构于 netty 之上,机能还算可以;协议计划上没有足够的前瞻性,不得当做 service-mesh 谈不上何等优雅,可是好歹风风雨雨用了这么多年,周边也有不少配套组件譬喻 dubbo2.js, dubbo-go, dubbo-cpp,必然水平办理了多说话的题目。
  • webservice://,hession://,thrift:// 等协议,根基是为了适配已有协议的处事端/客户端,借助于 dubbo 框架的 api,可以行使其成果特征,意义不是出格大。
  • redis://,memcached:// 等协议,并非是袒露给用户设置的协议,一样平常是 dubbo 自用,在注册中心模块中会行使到响应的扩展

全部协议的详细行使场景和其特征,我也许会单独写文章来说明,而现在我们要思索的是 Dubbo 提供 http 协议到底办理什么题目,什么场景下用户会思量行使 Dubbo 的 http 协议。

我小我私人以为 Dubbo 现现在的 http 协议较量鸡肋,原生 http 通讯的上风在于其通用性,根基全部说话都有配套的 http 客户端和处事端支持,可是 Dubbo 的 http 协议却行使了 application/x-java-serialized-object 的名目来做为默认的 payload,使得其损失了跨说话的上风。也许有读者会辩驳:HttpInvoker 支持设置序列化名目,不能这么纰漏的诟病它。但着实我们所存眷的恰好是默认实现,正如 dubbo:// 协议也可以设置 fastjson 作为序列化方案,可是我们同样不以为 dubbo:// 协议是一个优越的跨说话方案,来由是一样的。虽然,评价一个应用层协议是否是优越的,是否得当做 mesh 等等,必要多种偏向去说明,这些我不在本文去说明。

说到底,本文花了必然的篇幅向各人先容了 Dubbo 的 http 协议,到头来却是想汇报你:这是一个较量鸡肋的协议,是不是有些扫兴呢?不要扫兴,dubbo 也许在 2.7.4 版本废弃现有的 http 协议,转而行使 jsonrpc 协议更换,着实也就是将 jsonrpc 协议换了个名字罢了,而关于 jsonrpc 的细节,我将会在下一篇文章中先容,届时,我也会说明,为什么 jsonrpc 比现有的 http 协议更得当戴上 http 协议的帽子,至于现有的 http 协议,我更倾向于称之为:spring-httpinvoker 协议。

总结

dubbo 现有 http 协议的意义是什么?假如你风俗于行使 Spring HttpInvoker,那或者现有的 http 协议尚有必然的用处,但从 Dubbo 交换群和 Spring 文档先容其所耗费的篇幅来看,它还长短常小众的。同时也可以让我们更好地熟悉协议成长的汗青,知道一个协议为什么存在,为什么会被裁减。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读