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 的完整请求链路。
Dubbo 一次 RPC 调用可以概括为:
服务注册 → 服务发现 → 动态代理 → Invoker → Cluster → LoadBalance → Filter → Netty 通信 → Provider 执行业务 → 返回结果。
其中 Invoker 是统一调用入口,Cluster 负责集群容错,LoadBalance 负责负载均衡,Filter 负责责任链扩展,Netty 负责高性能网络通信,它们共同构成了 Dubbo 的完整请求链路。
相关文章
-
线程和进程的区别?
线程和进程的区别?
NEW个对象 2025-01-09
-
Git常用命令
Git常用命令
NEW个对象 2024-10-03
-
数据库表设计3NF?
数据库表设计3NF?
NEW个对象 2026-06-28
NEW个对象
JAVA是世界上最好的语言