一文具体解读 Dubbo 中的 Http 协议
斲丧者端引用处事同样有两个留意点:
挪用细节说明 对付 Spring HttpInvoker 的底层实现,就没须要穷究了,但各人必定照旧会好奇一些细节:dubbo 中的 http 报体裁是怎么组织的?怎样序列化工具的? 我们行使 Wireshark 可以抓取到客户端发送的哀求以及处事端相应的报文。 ![]() 追踪报文流,可以看到具体的哀求和相应内容 ![]() 从 ContentType:application/x-java-serialized-object 和报文 Body 部门的 ASCII 码可以看出,行使的是 Java Serialize 序列化。我们将 Body 部门导出成文件,行使 Java Serialize 反序列化相应,来验证一下它的庐山真脸孔: ![]() 行使 Java Serialize 可以正常反序列化报文,获得功效是 Spring 内置的包装类 RemoteInvocationResult,内里装饰着现实的营业返回功效。 http 协议的意义 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 文档先容其所耗费的篇幅来看,它还长短常小众的。同时也可以让我们更好地熟悉协议成长的汗青,知道一个协议为什么存在,为什么会被裁减。
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |