Dubbo支持哪些协议?各种协议用于什么场景,为什么?

Dubbo是一个分布式、高性能、透明化的RPC服务框架,提供服务自动注册、自动发现等高效服务治理方案,可以和Spring框架无缝集成。而且Dubbo支持多种协议,默认使用dubbo协议,原因如下:

dubbo协议:
单一TCP长连接和NIO异步通讯
适合大并发小数据量的服务调用,以及服务消费者远大于提供者的情况
Hessian二进制序列化

缺点是不适合传送大数据包的服务

rmi协议:
采用JDK标准的rmi协议实现,传输参数和返回参数对象需要实现Serializable接口
使用java标准序列化机制,使用阻塞式短连接,传输数据包不限,消费者和提供者个数相当
多个短连接,TCP协议传输,同步传输,适用常规的远程服务调用和rmi互操作

缺点是在依赖低版本的Common-Collections包,java反序列化存在安全漏洞,需升级commons-collections3 到3.2.2版本或commons-collections4到4.1版本。

webservice协议:
基于WebService的远程调用协议(Apache CXF的frontend-simple和transports-http)实现,提供和原生WebService的互操作
多个短连接,基于HTTP传输,同步传输,适用系统集成和跨语言调用。


http协议:
基于Http表单提交的远程调用协议,使用Spring的HttpInvoke实现
对传输数据包不限,传入参数大小混合,提供者个数多于消费者

缺点是不支持传文件,只适用于同时给应用程序和浏览器JS调用

hessian:
集成Hessian服务,基于底层Http通讯,采用Servlet暴露服务,Dubbo内嵌Jetty作为服务器实现,可与Hession服务互操作
通讯效率高于WebService和Java自带的序列化
适用于传输大数据包(可传文件),提供者比消费者个数多,提供者压力较大

缺点是参数及返回值需实现Serializable接口,自定义实现List、Map、Number、Date、Calendar等接口

thrift协议:
对thrift原生协议的扩展添加了额外的头信息
使用较少,不支持传null值

memcache:
基于memcached实现的RPC协议

redis:
基于redis实现的RPC协议

发布了224 篇原创文章 · 获赞 34 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_39309402/article/details/104745622