首页 > 项目 > 当前页面

Dubbo 一次 RPC 请求执行流程

2026-06-24 NEW个对象

📌 Dubbo 一次 RPC 请求执行流程

Dubbo 是一套高性能 RPC 框架,一次远程调用会经历服务注册、服务发现、代理调用、负载均衡、网络通信、线程派发、业务执行以及结果返回等多个阶段。

🚀 Dubbo 请求流程

Provider启动 │ ├── 注册服务到Nacos/Zookeeper │ Consumer启动 │ ├── 订阅服务列表 ├── 创建代理对象(Proxy) │ 业务调用 │ ▼ Invoker.invoke() │ Cluster(集群容错) │ LoadBalance(负载均衡) │ Filter责任链 │ Netty Client │ TCP发送RPC请求 │ Netty Server │ Decode解码 │ 业务线程池 │ Provider实现类 │ 执行业务逻辑 │ Encode编码 │ Netty返回结果 │ Consumer收到响应 │ Future完成 │ 返回业务结果

🎯 核心组件

组件 作用
Registry 服务注册与发现(Nacos、ZooKeeper)
Proxy 生成消费者代理对象
Invoker 统一 RPC 调用入口
Cluster 集群容错、失败重试、Failover 等
LoadBalance 负载均衡(随机、轮询、一致性Hash等)
Filter 日志、鉴权、限流、TraceId 等责任链处理
Netty 网络通信框架

💡 一次调用经历了什么

  • ① Provider 启动后向注册中心注册服务。
  • ② Consumer 启动订阅服务地址并缓存到本地。
  • ③ 调用接口实际上调用的是 Dubbo 动态代理对象。
  • ④ Invoker 经过 Filter、Cluster、LoadBalance 选择一个 Provider。
  • ⑤ Netty 将请求序列化后发送给服务端。
  • ⑥ Provider 在线程池中执行业务逻辑。
  • ⑦ 返回结果经过编码,通过 Netty 返回 Consumer。
  • ⑧ Consumer 反序列化数据,将结果返回给调用方。

⚠️ Dubbo 中常见 Filter

  • ContextFilter(上下文)
  • ExceptionFilter(异常处理)
  • TimeoutFilter(超时)
  • TraceFilter(链路追踪)
  • AccessLogFilter(访问日志)
  • TokenFilter(鉴权)
  • 自定义 Filter(日志、限流、监控等)
✅ 面试总结

Dubbo 一次 RPC 调用可以概括为:

服务注册 → 服务发现 → 动态代理 → Invoker → Cluster → LoadBalance → Filter → Netty 通信 → Provider 执行业务 → 返回结果。

其中 Invoker 是统一调用入口,Cluster 负责集群容错,LoadBalance 负责负载均衡,Filter 负责责任链扩展,Netty 负责高性能网络通信,它们共同构成了 Dubbo 的完整请求链路。

相关文章

NEW个对象 NEW个对象
JAVA是世界上最好的语言