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 的完整请求链路。
相关文章
-
SpringBoot自动配置原理详解
在传统Spring项目开发中,开发人员需要编写大量XML配置或者Java配置类。例如配置数据源、事务管理器、Redis连接池、MVC组件等,都需要手动完成Bean注册。
NEW个对象 2026-06-13
-
用Python分析Excel数据,比用SQL分析数据强在哪里?
用Python分析Excel数据,比用SQL分析数据强在哪里?
NEW个对象 2026-06-16
-
面试官让我设计一个秒杀系统
秒杀系统需要解决哪些问题,这里列几个关键性的问题: 1、高并发的瞬时流量 2、库存扣减 3、重复下单 4、热点数据
NEW个对象 2024-10-07
NEW个对象
JAVA是世界上最好的语言