mirror of
https://github.com/doocs/advanced-java.git
synced 2025-01-01 04:30:08 +08:00
34 lines
1.7 KiB
Markdown
34 lines
1.7 KiB
Markdown
|
## 面试题
|
|||
|
dubbo 支持哪些通信协议?支持哪些序列化协议?
|
|||
|
|
|||
|
## 面试官心理分析
|
|||
|
上一个问题,说说 dubbo 的基本工作原理,那是你必须知道的,至少知道 dubbo 分成哪些层,然后平时怎么发起 rpc 请求的,注册、发现、调用,这些是基本的。
|
|||
|
|
|||
|
接着就可以针对底层进行深入的问问了,比如第一步就可以先问问序列化协议这块,就是平时rpc的时候怎么走的?
|
|||
|
|
|||
|
## 面试题剖析
|
|||
|
### dubbo 支持不同的通信协议
|
|||
|
- dubbo 协议
|
|||
|
|
|||
|
**默认**就是走 dubbo 协议,单一长连接,NIO 异步通信,基于 hessian 作为序列化协议。使用的场景是:传输数据量小(每次请求在 100kb 以内),但是并发量很高。
|
|||
|
|
|||
|
为了要支持高并发场景,一般是服务提供者就几台机器,但是服务消费者有上百台,可能每天调用量达到上亿次!此时用长连接是最合适的,就是跟每个服务消费者维持一个长连接就可以,可能总共就 100 个连接。然后后面直接基于长连接 NIO 异步通信,可以支撑高并发请求。
|
|||
|
|
|||
|
- rmi 协议
|
|||
|
|
|||
|
走 Java 二进制序列化,多个短连接,适合消费者和提供者数量差不多,适用于文件的传输,一般较少用。
|
|||
|
|
|||
|
- hessian 协议
|
|||
|
|
|||
|
走 hessian 序列化协议,多个短连接,适用于提供者数量比消费者数量还多,适用于文件的传输,一般较少用。
|
|||
|
|
|||
|
- http 协议
|
|||
|
|
|||
|
走 json 序列化
|
|||
|
|
|||
|
- webservice
|
|||
|
|
|||
|
走 SOAP 文本序列化
|
|||
|
|
|||
|
### dubbo 支持的序列化协议
|
|||
|
dubbo 支持 hession、Java 二进制序列化、json、SOAP 文本序列化多种序列化协议。但是 hessian 是其默认的序列化协议。
|