题目:Dubbo 和 Feign 有什么区别?
难度:difficulty/low
评分:⭐⭐⭐⭐☆(4/5)
Dubbo 和 Feign 都是为了实现微服务间相互调用的。Dubbo 主要是基于 RPC 实现,并且有自己的注册中心管理服务的发现等;Feign 是 springcloud 的一个组件,他主要是使用 http 进行访问。
优点:核心差异抓准——Dubbo=RPC 长连接,Feign=HTTP REST。
不足:漏 Dubbo 序列化(Hessian)、负载均衡算法、服务治理(权重/路由);Feign 声明式接口。
补充:Dubbo 是高性能二进制 RPC(Netty/TCP + Hessian),Feign 偏声明式 HTTP 客户端。
最后更新:2026-10-27 · 基于第 1 次作答
结论:Dubbo 是 RPC 框架(二进制长连接),Feign 是 HTTP 客户端(文本短连接),核心差异在协议。 关键词:TCP 长连接 · Hessian 序列化 · 声明式 HTTP 边界:内部高并发用 Dubbo,对外/异构用 Feign。
核心考点定位:考察 RPC 与 HTTP 的本质差异——二进制长连接 vs 文本短连接,以及选型依据。面试官想排除"两个都是 HTTP"的错误认知。
机制链(≥3 环):
证据锚点(≥6):
Netty:Dubbo 底层传输,TCP 长连接 NIOHessian:Dubbo 默认序列化,二进制Zookeeper/Nacos:Dubbo 注册中心@FeignClient:声明式接口,Spring 生成代理Jackson:Feign JSON 序列化LoadBalancer:Spring Cloud 服务发现+负载均衡对比与权衡:
| 方案 | 正确性 | 性能 | 失败模式 | 适用边界 |
|---|---|---|---|---|
| Dubbo(RPC) | 强类型 | 高(长连接+二进制) | 跨语言弱、协议私有 | 内部服务调用 |
| Feign(HTTP) | 松耦合 | 中(短连接+JSON) | 连接开销、吞吐低 | 对外/异构/多语言 |
| gRPC | 强类型 | 高(HTTP/2+Protobuf) | 学习成本 | 跨语言高性能 |
常见误区:
适用边界:Dubbo 跨语言弱、私有协议,不适合多语言异构;Feign 性能低于 RPC,不适合超高吞吐;gRPC 介于两者之间。
【结论】 面试官您好,Dubbo 是 RPC 框架、Feign 是 HTTP 客户端,核心差异在"二进制长连接 vs 文本短连接"。
【三点】 第一,Dubbo 基于 Netty/TCP 长连接 + Hessian 二进制序列化,体积小、延迟低,靠注册中心(Zookeeper/Nacos)做服务发现和负载均衡,支持权重路由、熔断等服务治理能力。第二,Feign 是声明式 HTTP 客户端,@FeignClient 接口由 Spring 生成代理,走 HTTP/JSON,标准化、跨语言、可读性好,还和 Spring Cloud LoadBalancer、熔断组件天然整合。第三,选型上内部高并发用 Dubbo,对外或异构系统用 Feign,两者可混用,没有冲突。
【边界】 当然,Dubbo 跨语言弱、协议私有,Feign 性能不及 RPC——没有绝对,看调用场景;gRPC 是折中(HTTP/2+Protobuf)。
| # | 日期 | 评分 | 本轮主要问题 | 记录 |
|---|---|---|---|---|
| 1 | 2026-10-27 | 4/5 | 漏 Dubbo 序列化/负载均衡细节 | 第 1 次 |