主题
面试速答(先看这里)
**一句话结论:**dubbo支持多种协议,主要有以下几个:
60秒标准回答:
dubbo支持多种协议,主要有以下几个
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
**记忆锚点:**dubbo → hessian → thrift → WebService → memcached → Dubbo
关键取舍:
- hessian序列化协议,多个短连接,同步HTTP传输,传入参数较大,提供者大于消费者,提供者压力较大,适用于文件的传输,一般较少用;
追问准备:
- 围绕「dubbo」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「hessian」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「thrift」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
dubbo支持多种协议,主要有以下几个:
1、dubbo 协议 (默认)
默认就是走dubbo协议的,基于hessian作为序列化协议,单一长连接,TCP协议传输,NIO异步通信,适合大并发小数据量的服务调用,以及消费者远大于提供者,传输数据量很小(每次请求在100kb以内),但是并发量很高。
2、rmi 协议
采用JDK标准的rmi协议实现,传输参数和返回参数对象需要实现Serializable接口,使用java标准序列化机制,使用阻塞式短连接,传输数据包大小混合,消费者和提供者个数差不多,可传文件,传输协议TCP。
3、hessian 协议
集成Hessian服务,基于HTTP通讯,采用Servlet暴露服务,Dubbo内嵌Jetty作为服务器时默认实现,提供与Hession服务互操作。
hessian序列化协议,多个短连接,同步HTTP传输,传入参数较大,提供者大于消费者,提供者压力较大,适用于文件的传输,一般较少用;
4、http 协议
基于Http表单提交的远程调用协议,使用Spring的HttpInvoke实现。
5、webservice 协议
基于WebService的远程调用协议,集成CXF实现,提供和原生WebService的互操作。
6、thrift 协议
当前 dubbo 支持的 thrift 协议是对 thrift 原生协议 的扩展,在原生协议的基础上添加了一些额外的头信息,比如 service name,magic number 等。
7、memcached 协议
基于 memcached实现的 RPC 协议。
8、redis 协议
基于 Redis实现的 RPC 协议。
9、restful
基于标准的Java REST API——JAX-RS 2.0(Java API for RESTful Web Services的简写)实现的REST调用支持