← 每日面试题 学习看板

Dubbo和Feign有什么区别?

面试题/00java/04 框架/02SpringCloud/Dubbo和Feign有什么区别?.md

面试记录 2026-10-27(Round 29)

题目: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 次作答

L1 · 30 秒速记

结论:Dubbo 是 RPC 框架(二进制长连接),Feign 是 HTTP 客户端(文本短连接),核心差异在协议。 关键词:TCP 长连接 · Hessian 序列化 · 声明式 HTTP 边界:内部高并发用 Dubbo,对外/异构用 Feign。

L2 · 核心讲解

核心考点定位:考察 RPC 与 HTTP 的本质差异——二进制长连接 vs 文本短连接,以及选型依据。面试官想排除"两个都是 HTTP"的错误认知。

机制链(≥3 环):

  1. Dubbo 调用 → 序列化为二进制(Hessian):为什么——二进制体积小,传输快
  2. Feign 调用 → JSON 文本(Jackson):为什么——HTTP 标准化,可读性好
  3. Dubbo 长连接复用 → 减少握手:为什么——Netty/TCP 长连接,避免频繁建连开销

证据锚点(≥6):

对比与权衡:

方案正确性性能失败模式适用边界
Dubbo(RPC)强类型高(长连接+二进制)跨语言弱、协议私有内部服务调用
Feign(HTTP)松耦合中(短连接+JSON)连接开销、吞吐低对外/异构/多语言
gRPC强类型高(HTTP/2+Protobuf)学习成本跨语言高性能

常见误区:

  1. 错误:Dubbo 也是 HTTP 调用 → 正确:Dubbo 是 TCP 长连接 RPC → 为什么:底层 Netty/TCP,非 HTTP
  2. 错误:Feign 性能更高 → 正确:Dubbo 性能更高 → 为什么:二进制 + 长连接复用
  3. 错误:Dubbo 和 Feign 只能二选一 → 正确:可混用 → 为什么:内部 RPC 对外 HTTP 是常见组合

适用边界:Dubbo 跨语言弱、私有协议,不适合多语言异构;Feign 性能低于 RPC,不适合超高吞吐;gRPC 介于两者之间。

延伸追问(≥3)

  1. Dubbo 为什么比 HTTP 快?
  1. Dubbo 和 Feign 能混用吗?
  1. gRPC 相比两者的位置?

面试者参考回答(400–700 字)

【结论】 面试官您好,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)。


作答历史

#日期评分本轮主要问题记录
12026-10-274/5漏 Dubbo 序列化/负载均衡细节第 1 次